优化接口性能 - 单表优化sql查询语句

基本场景设定:InnoDB引擎,一张单表有 300多万条数据,字段为:id(主键)、name、time、value。

试验场一:

-》Mysql语句:SELECT * from gw_yl_real_data where name = '人民广场东街上海路'  

-》查询结果:查询数据:50261  ;平均耗时:12.479s

试验场二:

-》Mysql语句:SELECT * from gw_yl_real_data where name in ('人民广场东街上海路','正源街宝湖路',胜利街明达巷',六盘山路正源街',怀远西路北民大附中') 

-》查询结果:查询数据:251319;平均耗时:12.528s

试验场三:

-》Mysql语句:SELECT * from gw_yl_real_data where name = '人民广场东街上海路' and time = '2020-11-04 05:29:00'

-》查询结果:查询数据:1;平均耗时:12.327s

试验场四:

-》Mysql语句:SELECT * from gw_yl_real_data where name in ('人民广场东街上海路','正源街宝湖路',胜利街明达巷',六盘山路正源街',怀远西路北民大附中') and time = '2020-11-04 05:29:00'

-》查询结果:查询数据:5;平均耗时:12.467s

试验场五:使用name建立普通索引

-》Mysql语句:SELECT * from gw_yl_real_data where name = '人民广场东街上海路' 

-》查询结果:查询数据:50261;平均耗时:12.626s

试验场六:使用name + time建立唯一索引

-》Mysql语句:SELECT * from gw_yl_real_data where name = '人民广场东街上海路'  

-》查询结果:查询数据:50261;平均耗时:354.092s

试验场七:使用name + time建立唯一索引

-》Mysql语句:SELECT * from gw_yl_real_data where name = '人民广场东街上海路' and time = '2020-11-04 05:29:00'

-》查询结果:查询数据:1;平均耗时:0.032s

 

结论:

1.对比试验一和二、试验三和四可知,查询一个或者多个,使用 in 来查询效率并没有降低。

2.对比试验三和七可知,建立唯一组合索引后查询速度显著提高

3.对比试验一和六可知,不适当的索引反而会拖慢查询速度(原因待确定)

4.对比试验一和五可知,普通索引对单表查询速度无用。EXPLAIN 分析试验五,发现使用了索引,并且只扫描了104000行,试验一则扫描了全部的3170076行,但是查询速度差不多(原因待确定)

 

 

上一篇:自定义表格


下一篇:Web API接口之FileReader