神器的Limit 1
如果明知道只会有一条返回数据,则可避免全表扫描,在第一次找到数据时就返回
like语句的优化
like语句一般业务要求都是 ‘%关键字%‘这种形式,但是依然要思考能否考虑使用右模糊的方式去替代产品的要求
批量插入
INSERT into person(name,age) values(‘A‘,24),(‘B‘,24),(‘C‘,24);
偏移量offse过大
因此我们先查出偏移后的主键,再根据主键索引查询数据块的所有内容即可优化
# 反例(耗时129.570s)
select * from task_result LIMIT 20000000, 10;
# 正例(耗时5.114s)
SELECT a.* FROM task_result a, (select id from task_result LIMIT 20000000, 10) b where a.id = b.id;
# 说明 task_result表为生产环境的一个表,总数据量为3400万,id为主键,偏移量达到2000万
count(*) 还是 count(id)
说明:count(*)会统计值为 NULL 的行,而 count(列名)不会统计此列为 NULL 值的行
COUNT(*)=COUNT(1)>COUNT(id)
字段类型不同导致索引失效
数据库在查询的时候会作一层隐式的转换,比如 varchar 类型字段通过 数字去查询时,索引会丢失