【 TiDB 使用环境】生产环境
【 TiDB 版本】v7.1.0
【遇到的问题:问题现象及影响】: 官方文档上写的劣势中的第二项,有测试数据么?
TIDB 聚簇索引表和非聚簇索引表的区别其实就是key是由表id+主键组成还是_tidb_rowid构成的,为什么说当使用大于64位的数据类型作为主键时且存在多个二级索引时,可能占用更多的空间,因为这样也就意味着这个表的key会大于64位,而每个二级索引都需要保存每一列的key,这时二级索引越多,key越长,也就意味着这个表的key存储次数越多,占用的空间也越多
举个例子: 主键是两个字段组合主键(a,b),而且两个字段类型都是64位的bigint,按照你的意思这样的主键其实超过64位了【64+64=128】,所以存储容量也就增加了,而且这些信息会保存到writeCF中,对么
聚簇索引不占用额外空间,我测试,在io性能较弱时候用聚簇索引比不用聚簇索引快一倍,因为少了一次索引IO
看上面的回复和官方文档的信息
是,会的
是的,正常聚簇索引表比非聚簇索引表快就快在它的key是和主键一一对应的,所以可以通过主键直接确定它的key,但是如果它的主键非常长,就会导致key很长,二级索引多的情况确实可能占用空间要大一点,但是我觉得只要不是长的过分,多占用那点空间无所谓,毕竟相对于存储的损耗来说,系统的性能提升才是更重要的,所以我还是推荐多使用聚簇索引表。
我结合自己的业务场景测试一下,这两类表的类型在成本上的差距
你可以试试在只有主键索引情况下性能差距很大
ok,我是要这么测试的,谢谢提醒