简单的数据库查询优化

神器的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 类型字段通过 数字去查询时,索引会丢失

简单的数据库查询优化

上一篇:MySQL 5.7慢日志时间与系统时间相差8小时问题的解决


下一篇:考试JDBC项目速成