对于业务来讲,在大数据量(至少过千万),并且表数据选择性查询,使用分区表的场景如下:
Range 分区可以用于解决业务中大量删除带来的性能问题,支持快速删除分区,TiDB 4.0 虽然事务限制放开,但是 DELETE 数据还是没有直接 DDL 这种直接删除底层的 SST 文件来更快速。
使用 Hash 分区表来一定程度上解决写热点问题:Hash 分区则可以用于大量写入场景下的数据打散。
对于业务透明,避免了分库分表,还是操作一张表,只不过通过分区表的方式将数据分布到不同分区,也能在一定程度上保证 SQL 性能。
运维管理便利,可以单独维护具体分区。
典型场景举例:
商业数据分析场景:经常有一些按时间实时写入的广告的点击/曝光日志,用户账户实时消费报表,指标数据实时监控表。因为数据量较大,TiDB 中可以选择保留一个月或者半年,业务程序经常会访问当天分时数据统计,同比上个月的当天,以及去年当天的数据,这个时候只需要根据时间字段创建 Range 分区表,对于以上的需求,只需要访问 3 个分区就可以快速实现统计,因为分区裁剪功能避免了扫描其他分区数据。
审核业务:审核日志表这些都可以按天做 Range 分区。审核 Log 表数据用来统计分析每个审核人员的工作量,可以用作绩效等方面的参考。
基础信息业务:比如一些账户表。由于用户信息太庞大了,并没有明显可以分区的特征字段。可以根据表中 BIGINT 类型的 UID 字段做 Hash 分区,结合分区时配置的分区数量,这样可以把 UID 打散到不同的分区, Hash 分区只能针对整数进行 Hash ,从而提高查询的性能。