【问题标题】:mySQL Clustered index: how do gaps in id values impact query performancemySQL 聚集索引:id 值的差距如何影响查询性能
【发布时间】:2013-06-21 07:41:26
【问题描述】:

我的数据将分布在具有相同架构的 50 个数据库中,假设只有一个表 ORDER(50 个客户端每个数据库一个数据库),但每条记录必须是全局可识别的。我打算使用数字 UID 作为 PK。

我的理解是mySQL会为这个PK创建一个聚集索引。

数据将始终以单调递增的 UID 顺序插入。

关于查询性能的问题:在决定如何生成uid时,我有两种选择。哪个对查询性能更好(在给定的数据库中),还是没关系?

1) 对于每个客户端/数据库,我分配一个固定的硬编码“范围”,这对于那里的所有未来记录绝对足够:我选择了一个非常大的数字范围,范围为 10^15,并且在我开始的范围内递增 1 以使该特定 DB 的所有 UID 值都很大,但它们之间不会有“漏洞”

2) 我对所有数据库中的记录使用全局共享的 HiLo 生成器,这意味着对于给定的数据库,那里的记录将具有较小的值(与 #1 中的 10^15 比例相比),但会有更多的“漏洞” ' 在连续的 UID 记录之间(或者更确切地说,在 UID 的 批次 之间:即,如果批次大小为 100,则 UID:100,101,102,...199,然后是 1400,1401,1402..1499 , 然后可能是 16000,16001,..16099)

【问题讨论】:

  • 您是否计划在 50 台服务器上托管这 50 个数据库?这是为了解决性能问题,还是仅仅意味着分离数据(出于隐私原因)?
  • 是的,由于隐私原因,它们必须是单独的服务器

标签: mysql performance indexing clustered-index


【解决方案1】:

最简单的解决方案是为所有表添加一个instance_id 列,为每个数据库预先确定,并使用标准的自动增量机制。记录的实际唯一 ID 是元组 (instance_id, autinc_val)

【讨论】:

  • 我试图避免使用复合键,因为它们在通信和编码时会使事情变得复杂,但感谢您提出这个解决方案
猜你喜欢
  • 1970-01-01
  • 2012-11-16
  • 1970-01-01
  • 2019-09-02
  • 1970-01-01
  • 2016-09-05
  • 1970-01-01
  • 2013-09-09
  • 2010-09-12
相关资源
最近更新 更多