分区划分请教咨询

【 TiDB 使用环境】Poc
【 TiDB 版本】6.1.3
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】


问题说明:不同的股票有不同的记录数,想要通过划分分区 使得数据可以均匀的入库,有些code有20多条记录。而有的股票只有1条记录、

有尝试使用 Range 分区,但是报错了…请教像这种情况使用那种分区类型分区比较合适。sql语法是。

code.xlsx (42.0 KB)

mysql要求主键必须包含分区键。

分区的好处是删除的时候按分区删会比较容易,还有就是冷热数据的分离。

如果没有这两块的需求,不如不要分区。tidb本来就是按照region分片的,会自动调度。

https://docs.pingcap.com/zh/tidb/stable/high-concurrency-best-practices#tidb-高并发写入场景最佳实践

如果是关于高并发写入的优化,看上面这个最佳实践。

评估下数据量,几亿这个量级就别用分区了

1 个赞

大佬,请教一下,如果查询的数据在一个region是不是比分布在多个region速度更快呀

分布在多个region快,如果读取集中在一个region上,是读取热点。可能是需要优化的。

https://docs.pingcap.com/zh/tidb/stable/troubleshoot-hot-spot-issues

https://docs.pingcap.com/zh/tidb/stable/dev-guide-use-follower-read#优化读热点

1 个赞

学习了

这个是表设计逻辑问题吧。你把一个varchar类型的字段,拿去转换成时间,然后又把时间拿去跟一个varchar类型字段做比较,肯定会报错了

我借楼 请教一个问题,我 也有张业务大表,现在 分区创建好了。然后我 有个新的查询,想要 先找分区 ,再 走 索引查询 ,应该怎么办

默认会先做分区裁剪的,但如果你要指定访问某些分区的话可以用 select * from t partition(p0, p1) 这样就行

我 这个业务表 是刚做了分区的。为了删除方便。 就是加了分区后,我之前的查询慢了。我之前查询 的索引 应该怎么建立 一般都包含分区字段

那没有办法,肯定会慢的,特别是查询返回的结果数据量小的情况下,因为查询时要访问的分区变多了,会导致 RPC 数量增加。

看数据量,没有几十亿就别用分区表
tidb分区表除了删除大量数据方便,再也没啥优点,BUG还多


感谢再帮我看下 这个执行计划 ,是不是没有分区裁剪

走裁剪了,只访问了 pGame34 这个分区,但没走 index,走的是全表扫

我还没有创建这个索引。 我创建个 普通的索引就行了吧。对这些字段。不用创建全局索引

嗯 普通索引就行了 全局索引现在只支持 unique index,在分区已经裁剪到 1 个的情况下,普通索引和全局索引的性能可以认为是差不多的

可以看下这个: 分区表 | TiDB 文档中心 (pingcap.com)

TableRangeScan不是走的主键的范围查询?执行计划里没有体现走的是全表扫描吧

涨知识了,赶紧每次看这些论坛问题都会有一些提升。