为什么不分区?

che*_*ell 10 mysql database-design partitioning

什么时候不想对数据库进行分区?(思维MySQL 分区

就我而言

  • 我将从几百万行开始,它应该从那里增长。
  • 字符字段上的主键用作最频繁的查询限制(并且查找很频繁 - 至少每秒几次)。
  • 主键将被散列作为分区键
  • 将对上述频繁查询中拉取的每一行进行更新
  • 不太频繁的查找(针对日期列或其他)将需要命中所有分区

即使是最后一点,查找也不是并行运行的,所以在所有情况下,这是一个胜利吗?分区有什么缺点?为什么不是每个人都默认使用的东西,至少当您查看一百万条以上的记录时?

更新 - 我选择了 zgguy 的答案,但请注意,我在自己的研究结果中添加了自己的答案,包括指向对我非常有用的类似问题的非常好的答案的链接。

zgg*_*guy 5

性能问题没有灵丹妙药,分区也不是一个。

每个分区本质上都是一个表。因此,以允许数据库仅在一个分区中查找行的方式编写的查询变得更快。对于需要扫描整个大表的查询来说差异可能很大,但可以限制自己只扫描分区表中的一个分区。对于唯一键查找,差异要小得多。

但是,以需要数据库访问所有或大部分表(索引)分区的方式使用索引查找的查询将运行得相当慢。

并行执行本身就是一个话题。如果您运行大型隔夜批处理,并且让整个机器来完成单个工作,那么它的并行化是一件好事。然而,在数据库不断地为来自许多并发用户的查询提供服务的 OLTP 系统中,您不希望一个用户占用所有资源。