level0向level1压缩转存的时候老师讲是 有序的?这个是按什么序呢?

当有数据删除或者level0 (或其它级别)向 level1压缩转存的时候,董老师讲课讲到是有序的,这个序是按什么序呢?这个有序对 查询语句用到order by有没有性能提升?

按照rocksdb的key有序

1 个赞

有序是指的 Key,
level0,key 是无序的,这样查找的时候,只能通过跳表的方式
level1,按 key 排序后,查找就可以按照范围了,效率不一样

然后 order by 是tidb parser 的一个指令,实际上物理执行的时候还是通过 grpc的方式来获取数据的

通过更多的方式来优化,例如: blockCache,bloomfilter 来更快的获取 相关的 key 和 value

3 个赞

实际生产中key中有很多值啊,是按第一个吗?

大佬 可以推荐相关的文档 看下么?

key很多值指的是什么

三篇文章了解 TiDB 技术内幕 - 说存储 | PingCAP

可以参考下我在这个帖子里的回答。
另外,我补充一句:key:
rocksdb里的key排序实际上是(user_key+seq+type),并且排序算法不一定就是和表的排序有关。
其中userkey指的是tidb的key编码,又包括库名,表明,主键,版本等信息,可以参考 三篇文章里面的

order by如果是主键的话,就是userkey中间主键的一部分排序。

所以,rocksdb中的key的有序能不能加速order by,可以分开来说:这俩顺序不一定一样,如果说指望这个顺序一样才算加速,那就不算有序。但是rocksdb的key有序,提高了查询速度,这一定程序上又能说有用。

举例:tidb层,还有字符序这种东西,不同字符序结果就不一样。rocksdb里面的key排序不关注tidb设置的字符序。

按key排序 考虑到mvcc应该是按key 倒序

需要去看下rocksdb相关论文

1 个赞

key进行升序

该主题在最后一个回复创建后60天后自动关闭。不再允许新的回复。