mySQL Clustered index:id值中的间隙如何影响查询性能

时间:2013-06-24 17:38:30

标签: mysql performance indexing clustered-index

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

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

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

关于查询性能的问题:在决定如何生成uid时,我有两个选择。哪一个更适合查询性能(在给定的DB中),或者无关紧要?

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

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

1 个答案:

答案 0 :(得分:0)

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