sql优化实战( 二 )


EXPLAIN SELECT * FROM employees WHERE name is null;

sql优化实战

文章插图
 
like
like以通配符开头(‘$abc’)mysql索引失效会变成全表扫描操作
EXPLAIN SELECT * FROM employees WHERE name LIKE '%Lei';
sql优化实战

文章插图
 
字符串不加单引号索引失效
EXPLAIN SELECT * FROM employees WHERE name ='1000';EXPLAIN SELECT * FROM employees WHERE name =1000;
sql优化实战

文章插图
 
不加单引号的字符串,mysql底层会使用cust函数将其转换为字符串,此时索引失效 。
or&in少使用
少用or或in,用它查询时,mysql不一定使用索引,mysql内部优化器会根据索引比例、表大小等多个因素整体评估是否使用索引 。
EXPLAIN SELECT * FROM employees WHERE name ='LiLei' or name='HanMeimei';
sql优化实战

文章插图
 
范围查询优化
给年龄添加单值索引
ALTER TABLE `employees`ADD INDEX `idx_age`(`age`) USING BTREE;EXPLAIN select * from employees where age > 1 and age <= 2000;
sql优化实战

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

【sql优化实战】


推荐阅读