SQL无缺口自动增量--解决方法/最佳实践



我的应用程序需要一个具有自动递增主键列且没有间隙的表。正如其他人所指出的,AUTOINCREMENT实现通常会导致间隙(txn回滚、删除等(。没有间隙的AUTOINCREMENT在应用程序层实现起来很简单,但我想知道是否有更好的(更SQL的(方法来实现这一点。

我喜欢没有间隙的原因是因为我想象形式的范围查询

SELECT * 
FROM chainTable 
WHERE chn_id >= 10005003 AND chn_id <= 10005009

比形式的查询更快

SELECT * 
FROM chainTable 
WHERE chn_id >= 10005003 
ORDER BY chn_id 
LIMIT 7

在我的应用程序中,选定的行是在同一事务中创建的。因此,我对没有缺口的需求可以放宽到在同一事务中生成的值。所以我的问题归结为:

AUTOINCREMENT列值是否在事务中生成,以保证连续(即没有间隙(?

我的猜测仍然是";否";,但我很乐意犯错。

在应用程序中管理id的开销将比让sql引擎处理它更昂贵。

对于查询,只要在该列上有适当的索引,就不会有明显的性能差异。然而,第二个查询可能会稍微快一点,因为它只需要检查一个条件。

您的评论/答案中的2个结论:

  1. 这里提到的用例并不合适。(没有理由期望性能出色;也许恰恰相反。(但是,

  2. 如果您的数据模型需要没有间隔的升序,最好自己实现。

感谢所有

我想象形式的范围查询

<blockquote\
SELECT * 
FROM chainTable 
WHERE chn_id >= 10005003 AND chn_id <= 10005009
>

相关内容

  • 没有找到相关文章

最新更新