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

有一张数据表,存储大概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'
速度反而下降了好多,这是为何
全部评论
我尝试从数据库系统的运行过程给个思路。针对第一个 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
是否能够确认使用的索引数据结构,如果可以确认,后续可以分析一下。
点赞 回复 分享
发布于 2019-12-07 20:49
实在不行,建议导入 TiDB 中自己 Debug 跑一下。
点赞 回复 分享
发布于 2019-12-07 20:49

相关推荐

1 1 评论
分享
牛客网
牛客企业服务