Mysql基础技能(三)

来源:互联网 发布:淘宝模拟器抢券 编辑:程序博客网 时间:2024/05/16 19:30

索引优化基础

MySQL只在认为走索引可以筛去85%以上数据的时候,才使用索引,如果达不到这个标准,索引是无意义的。

前缀索引:MySQL可以利用索引的前向部分,但不可以利用后向部分,不支持反向索引。

    例如:SELECT col2 FROM table WHERE col1=1;可以使用索引(col1,col2),但不可以使用(col2,col1).

不等比较的优化:如果索引的前向部分在WHERE中是等于,那么可以使用索引,如果索引的前向部分再WHERE中是不等比较,那么不可以为后面的等于比较使用索引

    例如:SELECT col1 FROM table WHERE col2=1 AND col3 >10;可以完全使用索引(col2,col3),但只可以使用(col3,col2)的前缀,

排序的优化:可以在条件是等于的时候继续使用索引排序,或者条件中的不等于字段就是排序字段。

    例如:SELECT col1 FROM table WHERE col2=1 AND col3>0 ORDER BY col3,可以完全使用索引(col2,col3)避免排序。但条件是col2<1 AND col3=0 ORDER BY col3时则只能使用col2排除记录,不可以用来排序。

GROUP BY/DISTINCT也是以排序为基础,优化同上。

 

chema设计优化

TEXT/BLOB字段分开单表存储与原表主键一一对应。

经常查询的字段与不经常查询的字段分开存储,用主键一一对应,例如帖子标题和内容。

频繁进行统计的SQL,可以转化为表存储,将查询压力分散到更新时。

频繁的对表进行count也可以转化为统计表存储。

 

SQL书写优化

尽量将子查询转化为链接查询,除非子查询只返回极少的记录。

不要在条件里写不必要的条件。

没有必要排序的分组采用ORDER BY null指定不排序。

OR条件若不能正确的走索引,则拆分为两条SQL。

不在乎重复的情况下,UNION ALL可以避免UNION要做的排序。

没必要的时候不要做外连接,内连接效率比外连接高。