咨询一个问题 tidb的分布式数据库用分区表。怎么使用才会比普通表快?

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】5.4.3
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
能具体举例一下使用快的方法么?
【资源配置】
【附件:截图/日志/监控】

在MySQL这类基于B+树的数据库,分区表最大的作用就是降低单树的大小,降低总层数,提高查询效率,或者避免MySQL单表大小的限制(可能是20T左右,具体给忘了)。但是TiDB这类基于LSM树的分布式数据库基本都是通过划分region的方式将数据打散,对正常的OLTP查询理论上加索引会比改成分区表更快,也更方便。我能想到的场景,可能是针对OLAP的场景,举个例子,如果就是每次处理都是一个月或者一天的所有数据,那么根据时间分区直接读取整个分区,比根据索引来查询会减少二次回表的时间,可能会更快些。(不过我也没实验过,只是猜测而已)

因为tidb自己也是分布式表。我可以理解为单个分区 那tidb里面的分区表意义何在

分区表在tidb中与传统关系型数据库类似,避免归档等操作的大事务造成的性能抖动。

还有就是,可以配合placement rule做冷热分离用

TiDB 中的分区类型。当前支持的类型包括 Range 分区List 分区List COLUMNS 分区Hash 分区。Range 分区,List 分区和 List COLUMNS 分区可以用于解决业务中大量删除带来的性能问题,支持快速删除分区。Hash 分区则可以用于大量写入场景下的数据打散。

所有的SQL都带有分区键进行操作,基本就可以性能比普通表好

我觉得分区表最大的好处就是清理历史数据(时间分区) :grinning:

但实际上针对OLAP的场景,tidb不是更推荐直接使用tiflash吗?tiflash是列式存储,分区对tiflash没有吧?

1、 分区表方便历史数据管理 2、 分区裁剪后比全表扫描效率高 3、hash分区还自带打散效果

我这边对v6的版本做过分区和不分区的表压测,实际表现上分区表相对于不分区的表还会慢些。执行的过程中会多很多cop操作。要说增加分区的好处就是快速删除相关数据,因为我们这边的表数据很多,delete删的话很痛苦,而且还不能回收占用的空间,使用分区直接drop分区就好,咨询了相关技术人员也没有好的处理方式。我这使用的range分区的方式。

我也一直在想这个问题,分区表在分布式系统中,存在的最大作用是什么?

分区表 | PingCAP Docs

还有分区裁剪

如果分区剪裁不了,性能可能还不如不分区

是的 :joy:

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。