vlambda博客
学习文章列表

常见的sql使用的Mysql中的实践3(Mysql优化系列10)

    今天继续介绍两种常见的sql使用坑,我们一起看看这个坑到底怎么让我们的头发一撮一撮阵亡。

1、or或in在sql中的使用情况

     我们平时常用的两个条件查询,or 和in的使用。用它查询时,mysql不一定使用索引,mysql内部优化器会根据检索比例、表大小等多个因素整体评估是否使用索引,索引尽量少用。具体什么原因我们继续往下看。


EXPLAIN SELECT * FROM employees WHERE name = 'zhangsan' or name = 'lisi';

2、范围查询优化


给某一个a 字段增加一个单值索引

explain select * from t1 where a >=1 and a <=2000;

没走索引原因:mysql内部优化器会根据检索比例、表大小等多个因素整体评估是否使用索引。比如这个例子,可能是由于单次数据量查询过大导致优化器最终选择不走索引优化方法:可以讲大的范围拆分成多个小范围

explain select * from t1 where a >=1 and a <=500;

explain select * from t1 where a >=555 and a <=1000;


可是我们改变为范围变小时又走了索引,in 和or 都是范围查找,那么不一定加了索引就走索引。是根据查询数据大小,走全表扫描还是索引底层去判定那个速度更快。


这些都是一般情况,特殊情况我们后面继续找坑。