MySQL大型索引整数表示几行性能

时间:2011-06-21 13:44:45

标签: mysql

我的开发人员正在制作一个应用程序,并提出了以下架构

purchase_order int(25) sales_number int(12) fulfillment_number int(12)

purchase_order是此表中的索引。 (还有其他领域但与此问题无关)。 purchase_order是sales_number +履行的串联。

相反,我提出了一个id的auto_incrementing字段。

当前格式基本上可以是12-15个字符并随机生成(尽管始终是唯一的,因为sales_number + fulfillment_number始终是唯一的)。

我的问题是: 如果我有3行,每行有一个随机的btu唯一ID,即983903004,238839309,288430274,那么三行ID为1,2,3会有性能下降吗?

除此之外,我的另一个论点(对于那些感兴趣的人)是基于数据冗余的架构没有意义(可以很容易地做一个SELECT CONCATENAE(sales_number,fulfillment_number)...而不是将两列存储在一起第三)

3 个答案:

答案 0 :(得分:1)

我看到的问题不在于bigint vs int(autoicrement列也可以是bigint,它没有任何问题)但是主键的随机值。如果使用INNODB引擎,则主键同时是一个定义数据物理顺序的聚簇键。插入随机值可能会导致更多页面拆分,从而导致更大的碎片碎片,从而导致插入/更新查询减慢,但也会选择。 关于连接的论点是有意义的,但执行CONCATE也有其成本(不幸的是,mysql不支持计算的持久列,因此在某些情况下,可以将连接结果存储在单独的列中;)

答案 1 :(得分:0)

存储AFAIK整数并将其作为整数进行比较,因此比较应该花费相同的时间长度。

将两个整数(32位)连接成一个bigint(64位)可能会产生与硬件相关的性能损失。

答案 2 :(得分:0)

  1. 具有增量ID将在hdd上将在同一时间创建的记录放在彼此附近。这可能会使一些查询更快。如果这是innodb上的主键或使用这些id的索引。
  2. 增量记录有时可以更快地插入。试试看。
  3. 您需要确保随机ID是唯一的。所以你需要额外的查找。
  4. 我不知道这些要点对您的申请是否重要。