EXPLAIN SELECT * FROM employees WHERE name is null;
文章插图
like
like以通配符开头(‘$abc’)mysql索引失效会变成全表扫描操作
EXPLAIN SELECT * FROM employees WHERE name LIKE '%Lei';
文章插图
字符串不加单引号索引失效
EXPLAIN SELECT * FROM employees WHERE name ='1000';EXPLAIN SELECT * FROM employees WHERE name =1000;
文章插图
不加单引号的字符串,mysql底层会使用cust函数将其转换为字符串,此时索引失效 。
or&in少使用
少用or或in,用它查询时,mysql不一定使用索引,mysql内部优化器会根据索引比例、表大小等多个因素整体评估是否使用索引 。
EXPLAIN SELECT * FROM employees WHERE name ='LiLei' or name='HanMeimei';
文章插图
范围查询优化
给年龄添加单值索引
ALTER TABLE `employees`ADD INDEX `idx_age`(`age`) USING BTREE;EXPLAIN select * from employees where age > 1 and age <= 2000;
文章插图
没有走索引原因:mysql内部优化器会根据检索比例、表大小等多个因素整体评估是否使用索引 。这个例子没有走索引可能是因为单次数据量查询过大导致优化器最终选择不走索引 。优化方法:可以将大的范围拆分成多个小范围 。
【sql优化实战】
推荐阅读
- MySQL-查询分页
- MySQL 优化实施方案
- 2020球鞋排名 后卫实战球鞋2020排行榜
- HBase 有哪些优化点?
- MySQL 运维常用脚本
- MySQL 进行 Docker 容器化之体验与感悟
- MySQL-查询聚合函数
- mysql命令行脚本
- MySql基础架构以及SQL语句执行流程
- mysql把查询的结果保存到表