对不起,我的术语不正确(因为我不知道该怎么称呼它).. 如果唯一(索引)键从 0 和从 ie 100000 开始,这对性能有影响吗?
例如,如果我有
ID | Brand
----------------
1 | BMW
2 | FERARRI
或者
ID | Brand
----------------
100000 | BMW
100001 | FERARRI
性能/查询会有什么不同吗?我这样问是因为我有一个 PHP 函数可以删除所有内容并插入新值。这样,delete/insert/delete/insert导致ID越来越多,恐怕最后会不会出问题?或者这不是问题?
您的数据库不应该关心,在这种情况下,数字就是数字。无论哪种方式,性能都是一样的。
只要确保您选择了合适的数据类型,以便您有足够的空间来“增长”并且不会在您的预期使用中达到该数据类型的上限(例如,
smallint
如果您需要,请不要使用 a你的身份证要出去20亿)。较小的值可能会稍微更有效率。但是,如果您的代码效率如此之高,以至于更大的瓶颈之一是整数键的大小,那么您就遥遥领先于游戏,几乎没有什么可以优化的了。
您正在使用的数据库可能会使用不同的空间量来存储不同的数值,其中较小的数字往往使用较少的空间。并非每个数据库都会这样做,但有些会这样做(例如,Oracle 使用可变数量的字节来表示不同的数字)。如果您的应用程序是这种情况,那么具有较小键的行在磁盘上通常会较小,这意味着您可以在每个 I/O 请求中读取更多行,在每个索引块中容纳更多键,并在每 kb RAM 中缓存更多行。潜在地,您可能会发现重新启动密钥将允许您为密钥使用较小的数据类型,但这不太可能。所有这些都会有一些潜在的性能优势。
也就是说,收益的大小可能很小。在大多数表中,主键的大小对行的大小贡献很小,因此在键上节省一两个字节可能会导致每个页/块上的可用空间稍微多一些,这会抵消性能优势。即使您在每个页面/块上获得稍微多一些的数据,您也不太可能能够衡量改进。是的,您可能更有可能在缓存中找到一行,但很难量化如此小的改进。