MySQL 优化方案
基本上通过索引来解决 。
通常索引键在where , group by , order by 相关的列
一个表只能用一个索引(查询的时候)
所以当要执行复杂查询时最好使用联合索引就是 index (a,b,c,d,....)
where 需要注意的事,
索引是左到右使用的 , 如果是 index(a,b,c) 那么可以
1. where a = x and b = y and c = z
2. where a = x order by b,c
3 where a = x group by a,b,c
group by 需要注意的事 :
如果是多表查询,group by 索引只能group 最后的那个被join出来的表的列
比如 a straight join b
那么 group by a.x 是可以的
如果是 group by a.x,b.y 那就fair 了
table join 完了最后只能有一个表索引,其它表的列的索引全部作废了
但是在join的时候他们的索引是有帮助的
order by 要注意的事
group by 之后 要order by 是很困难的,因为他们必须是用联合索引顺着走.但一般上不那么巧
而且如果你order by 有 desc 反来反去也是不会走索引的。
所以呢遇到一些没办法用索引来优化的案子只好退而求其次
group by 和 order by 都是很伤的,尤其是你join table 的话它通常还会要 using temp filesort .
所以尽可能满足其中一个也好 。
那么如果真的无法满足的话,那么要确保数据量不要太大不然就gg 了 .
那么其它的一些方向就是通过一些table 设计来尽可能的优化
比如 : 反范式
就是把多个table的数据放在一个table 让他不必join .
这样的缺点就是重复数据多坑多,admin update的时候要同步的地方也多
maintain 起来会很难 。
优点就是数据在一个table 索引就容易建了 。
预先计算
就是不要在拿数据的时候才做计算,尽可能预先算了放进去 。
那么可以减低需要 group by sum order by sum 之类的问题 .
缓存
要确保每个语句一定可以被缓存,不要使用日期的函数来写语句,比如 where a.x = now()
把语句拆开
让c#分几次查询 ,简化sql语句 .
好处是可以分散缓存,容易使用各各表的索引 。
当然要在c#做,就要厉害LINQ啦
EXPLAIN 那些事 :
using temp filesort 都是不好的,filesort是因为有sort, 而 buffer不够就会用 temp,那就更糟糕了,子查询等也会制造temp
rows 表示扫描多少行,在 innodb中是不准的!可以用 myisam 做test.
MySQL 优化方案的更多相关文章
- MySql优化方案
mysql优化方案总结 u Mysql数据库的优化技术 对mysql优化时一个综合性的技术,主要包括 a: 表的设计合理化(符合3NF) b: 添加适当索引(index) [四种: 普通索 ...
- mysql优化方案总结
u Mysql数据库的优化技术 对mysql优化时一个综合性的技术,主要包括 a: 表的设计合理化(符合3NF) b: 添加适当索引(index) [四种: 普通索引.主键索引.唯一索引u ...
- mysql优化方案之sql优化
优化目标 1.减少 IO 次数 IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先 ...
- 数据库mysql优化方案
1.创建索引对于查询占主要的应用来说,索引显得尤为重要.很多时候性能问题很简单的就是因为我们忘了添加索引而造成的,或者说没有添加更为有效的索引导致.如果不加索引的话,那么查找任何哪怕只是一条特定的数据 ...
- 大佬是怎么思考设计MySQL优化方案的?
在进行MySQL的优化之前,必须要了解的就是MySQL的查询过程,很多查询优化工作实际上就是遵循一些原则,让MySQL的优化器能够按照预想的合理方式运行而已. 一.优化的哲学 注:优化有风险,涉足需谨 ...
- 大牛是怎么思考设计MySQL优化方案
在进行MySQL的优化之前,必须要了解的就是MySQL的查询过程,很多查询优化工作实际上就是遵循一些原则,让MySQL的优化器能够按照预想的合理方式运行而已. 1.优化的哲学 注:优化有风险,涉足需谨 ...
- MySQL优化方案二
摘自:http://www.thinkphp.cn/topic/3855.html 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需 ...
- 大牛是怎么思考设计MySQL优化方案的?
在进行MySQL的优化之前,必须要了解的就是MySQL的查询过程,很多查询优化工作实际上就是遵循一些原则,让MySQL的优化器能够按照预想的合理方式运行而已. 图-MySQL查询过程 一.优化的哲学 ...
- mysql 性能优化方案
网 上有不少MySQL 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果 ...
随机推荐
- Android 使用Application总结
Application 配置全局Context 第一步.写一个全局的单例模式的MyApplication继承自Application 覆盖onCreate ,在这个方法里面实例化Application ...
- Oracle extent
extent 上的块 物理上绝对连续 多个连续的block组成一个extent 不连续怎么多块读? Oracle 给表分配的单位是extent 去做 全表扫描的时候 以块为单位,按照extent来读取 ...
- [LeetCode] 200. Number of Islands 解题思路
Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surro ...
- hdu4324 拓扑排序
#include<cstdio> #include<string.h> #define maxn 2013 char M[maxn][maxn]; int du[maxn]={ ...
- MAC安装SVNServer
MAC已经自带了SVN,所以,直接使用就好 1.创建svn repository svnadmin create /path/svn/pro //仓库位置,svn是svn的目录,pro是一个版本库的 ...
- Javascript:charCodeAt()方法及示例
js charCodeAt()函数说明 返回一个整数,代表指定位置上字符的 Unicode 编码.该Unicode编码为十六进制 strObj.charCodeAt(index) 参数: strObj ...
- C#委托的回调机制
代码如下: public partial class FrmMain : Form { // 定义回调使用关键字 delegate(回调是委托的一种应用,其本质就是委托) private delega ...
- [编译原理代码][NFA转DFA并最小化DFA并使用DFA进行词法分析]
#include <iostream> #include <vector> #include <cstring> #include "stack" ...
- NumberSpinner( 数字微调) 组件
本节课重点了解 EasyUI 中 Spinner(微调)组件的使用方法,这个组件依赖于Numberbox(数值输入框)和 Spinner(微调)组件. 一. 加载方式//class 加载方式<i ...
- css属性之vertical-align详解
inline-block 该值会让元素生成一个内联级块容器(inline-level block container).一个inline-block的内部会被格式化成一个块盒,而该元素本身会被格式化成 ...