首页新闻找找看学习计划

MySql Innodb 一条简单sql查询耗时问题

0
悬赏园豆:50 [已解决问题] 解决于 2018-06-13 16:47

Mysql 同一条sql语句,只是查询条件不一样。
第一次查询结果17W,耗时11s;
第二次查询结果21W,耗时161s。
Duration差不多,Fetch差距和结果数据量不成正比。

17:14:26    select ID from TB1 where DomainID=@DomainID and WorkDate between '2018-05-05' and '2018-05-21'    178854 row(s) returned    0.015 sec / 11.453 sec

17:15:01    select ID from TB1 where DomainID=@DomainID and WorkDate between '2018-05-01' and '2018-05-21'    215679 row(s) returned    0.093 sec / 161.610 sec

问题补充:

explain 

type:range; possible_keys:ix_tb_did,ix_tb_wdate; key:ix_tb_wdate; key_len:4; ref:null; rows:346212; Extra:Using where;

type:ref; possible_keys:ix_tb_did,ix_tb_wdate; key:ix_tb_did; key_len:109; ref:const; rows:1261873; Extra:Using where;

 

强制使用索引ix_tb_wdate速度就快了。条件值不一样mysql选择的索引不一样。但是我这个实例中用WorkDate的索引更合理

 

 

我要娶LP的主页 我要娶LP | 初学一级 | 园豆:161
提问于:2018-05-22 17:32
< >
分享
最佳答案
0

mysql的优化器并不完美。在执行第二个sql时,可能优化器认为,使用ix_tb_wdate这个索引的代价比ix_tb_did大。使用ix_tb_wdate这个索引时是索引范围扫描,它的性能也低于ref。

收获园豆:50
AYard | 菜鸟二级 |园豆:436 | 2018-06-08 15:29
其他回答(2)
0

explain 看看执行情况

让我发会呆 | 园豆:2629 (老鸟四级) | 2018-05-22 17:40
0

explain 看执行情况再具体分析

、熙和 | 园豆:1486 (小虾三级) | 2018-05-22 17:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册