我的开发人员正在制作一个应用程序,并提出了以下架构
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)...而不是将两列存储在一起第三)
答案 0 :(得分:1)
我看到的问题不在于bigint vs int(autoicrement列也可以是bigint,它没有任何问题)但是主键的随机值。如果使用INNODB引擎,则主键同时是一个定义数据物理顺序的聚簇键。插入随机值可能会导致更多页面拆分,从而导致更大的碎片碎片,从而导致插入/更新查询减慢,但也会选择。
关于连接的论点是有意义的,但执行CONCATE
也有其成本(不幸的是,mysql不支持计算的持久列,因此在某些情况下,可以将连接结果存储在单独的列中;)
答案 1 :(得分:0)
存储AFAIK整数并将其作为整数进行比较,因此比较应该花费相同的时间长度。
将两个整数(32位)连接成一个bigint(64位)可能会产生与硬件相关的性能损失。
答案 2 :(得分:0)