为何我是用了联合索引后查询速度反而更慢了呢?

有一张数据表,存储大概100w左右的数据。这是sql语句:
select  * from data_value where data_point_id ='41607'  order by create_time  desc limit 0,1;
目前表里只有(除主键外)data_point_id一个索引
explain结果:

查询耗时:

添加联合索引:data_point_id,create_time
alter table data_value add index myindex (data_point_id,create_time)
explain结果:
查询耗时: '0.00032400', 'explain select *from data_value where data_point_id =\'41607\'  order by create_time  desc limit 0,1'
速度反而下降了好多,这是为何
全部评论
实在不行,建议导入 TiDB 中自己 Debug 跑一下。
点赞 回复 分享
发布于 2019-12-07 20:49
是否能够确认使用的索引数据结构,如果可以确认,后续可以分析一下。
点赞 回复 分享
发布于 2019-12-07 20:49
我尝试从数据库系统的运行过程给个思路。针对第一个 SQL,首先进行 TableScan ,读取所有 data_point_id 满足条件的元组,这里行为在其上有索引,所以会变成一个 IndexScan。然后是进行 Order by 操作,返回前两个数据。针对第二个 SQL,构建的索引似乎并不能加速数据定位的过程,首先你是在进行点查询,我认为应该是使用 hash table 作为索引数据结构,这个情况下,索引项的 key 是无序的,因此会抽取所有 data_point_id 满足条件的元组,不管 create_time的情况。因为又有使用 order by,所以使用 B+树 也是有可能的,这种情况下,可能会加速,具体情况我也分析不清楚。个人认为, Hash table 的可能性更大。
点赞 回复 分享
发布于 2019-12-07 20:44

相关推荐

不愿透露姓名的神秘牛友
07-01 17:13
想去,但是听说加班强度实在难崩,所以拒绝了,现在有点心梗对面hr感觉也是实习生,打电话的时候怪紧张的,但是感觉人很好嘞
水中水之下水道的鼠鼠:哥们这不先去体验一下,不行再跑呗,大不了混个实习经历(有更好的转正offer就当我没说)
点赞 评论 收藏
分享
认真搞学习:这么良心的老板真少见
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务