mysql 常用sql语句优化原则
2017-08-18 14:55
671 查看
mysql 常用sql语句优化
优化索引
mysql 中用到索引的的场景匹配全值 (对索引中所有列都指定具体的值,即索引中的所有列都有等值匹配的条件)
匹配值的范围查询 ( 对索引的值能进行范围查找 比如 > 和 < ,但是在聚合索引下,会使后面的索引失效,比如a_b_c 为聚合索引,b使用了范围查询,会使c的索引失效)
匹配最左前缀,仅仅使用索引中的最左边的列进行查找
仅仅对索引进行查询,当查询的列都在索引的字段中时,查询效率更高。
匹配列前缀,仅仅使用索引中的第一列,并且只包含索引第一列的开头一部分进行查找。比如 like ‘abc%’
能够实现索引匹配部分精确而其他部分进行范围匹配
如果列名是索引,使用 column is null会使用索引
mysql 5.6 引入了 index condition pushdown 的特性,进一步优化了查询。pushdown 表示操作下放,某些情况下的条件过滤操作下放到存储引擎
*
索引的使用原则
* 符合左前缀原则
* 索引上不要使用函数和进行运算,另外类型也要对应 比如 where name = abc 虽然sql不会报错,但是会导致索引失效
* 使用 or 时,如果存在没有在索引上的列,也会导致索引失效
* 如果 mysql 分析使用索引必没有使用索引查询效率更优,将不会使用索引
*
优化insert 语句
批量插入时尽量使用 insert into valuse(),(),() 这种形式优化orderby 语句
尽量在索引列上使用排序,排序同样符合索引的最佳左前缀原则排序时,尽量使用一种顺序排序,否则会导致索引失效
无法使用索引排序时,尽量使用单路排序,不要使用双路排序
优化group by 语句
默认情况下,group by 语句执行时需要先进行排序,优化参照 order by 语句。如果查询包括 group by 但用户想要避免排序结果的消耗,可以指定 order by null 禁止排序。优化嵌套查询
对于一些子查询,如果可以用表连接来解决并且效率更高,建议用表连接(尤其表连接的字段上有索引)优化 or 语句
对含有or 的查询语句,如果要利用索引,则 or 之间的每个条件列都必须用到索引,如果没有索引,则应该考虑增加索引优化分页查询
在索引上完成排序分页的操作,最后根据主键关联回原表查询锁需要的其它内容。例如select a.film_id,a.name from film a inner join (select film_id from film order by title limit 50,5) b on a.film_id = b.film_id
使用sql 提示
use index 在查询语句中表明的后面,添加 use index 来提供希望mysql去参考的索引列表,就可以让mysql不在考虑其它可用的索引。比如 select count(*) from table user index(idx_table_col)ignore index 如果想要忽略一个或多个索引,则可以使用ignore index 作为hint.
forece index 强制mysql使用一个特定的索引。
相关文章推荐
- MySQL常用30种SQL查询语句优化方法请慢用!
- 浅谈MySQL中优化sql语句查询常用的30种方法
- Mysql常用30种SQL查询语句优化方法
- MySQL中优化sql语句查询常用的30种方法
- Mysql常用30种SQL查询语句优化方法
- 浅谈MySQL中优化sql语句查询常用的30种方法
- 浅谈MySQL中优化sql语句查询常用的30种方法
- 浅谈MySQL中优化sql语句查询常用的30种方法
- 浅谈MySQL中优化sql语句查询常用的30种方法
- Mysql常用30种SQL查询语句优化方法
- 浅谈MySQL中优化sql语句查询常用的30种方法
- 浅谈MySQL中优化sql语句查询常用的30种方法
- 浅谈MySQL中优化sql语句查询常用的30种方法
- MySQL常用SQL语句优化
- 浅谈MySQL中优化sql语句查询常用的30种方法
- Mysql常用30种SQL查询语句优化方法
- Mysql常用30种SQL查询语句优化方法
- 学习笔记之 MySQL中优化sql语句查询常用的30种方法
- 浅谈MySQL中优化sql语句查询常用的30种方法
- 浅谈MySQL中优化sql语句查询常用的30种方法