获得下一个未使用的id的最有效方法

neo*_*neo 5 sql scalability execution-time

(与查找列表中最低未使用的唯一ID以及在SQL表上获取未使用的唯一值相关)

假设我有一个包含id列和其他一些表的表(它们在这里没有任何区别):

+-----+-----+
| id  |other|
+-----+-----+
Run Code Online (Sandbox Code Playgroud)

id具有数值增加值.我的目标是获得最低的未使用ID并创建该行.因此,当我第一次运行它将返回0并且该行的行将被创建.几次执行后,它将如下所示:

+-----+-----+
| id  |other|
+-----+-----+
|  0  | ... |
|  1  | ... |
|  2  | ... |
|  3  | ... |
|  4  | ... |
+-----+-----+
Run Code Online (Sandbox Code Playgroud)

通常,这些行中的某些行可能会被删除.假设用的ID的行13移除.表格看起来不像这样:

+-----+-----+
| id  |other|
+-----+-----+
|  0  | ... |
|  2  | ... |
|  4  | ... |
+-----+-----+
Run Code Online (Sandbox Code Playgroud)

如果我现在再次运行查询它想要返回id 1并且应该创建此行:

| id  |other|
+-----+-----+
|  0  | ... |
|  1  | ... |
|  2  | ... |
|  4  | ... |
+-----+-----+
Run Code Online (Sandbox Code Playgroud)

接下来的时间查询运行时,它应该返回ID的3,5,6,等.

运行这类查询的最有效方法是什么,因为我需要在一秒钟内相当频繁地执行它们(可以假设id是表的唯一目的)?是否可以通过一个查询获取下一个未使用的行?或者通过引入另一个跟踪未使用ID的表来更容易和更快速?

如果它明显更快,那么也可以获得重用表中任何漏洞的方法,前提是所有数字都会在某个时间重用.

奖金问题:我打算使用SQLite来存储这类存储信息,因为除了存储这些id之外我不需要数据库.有哪些可以做这个工作任何其他免费的(如语音)服务器显著快?

Yan*_*hon 2

正如丹尼斯·哈布林克所说;删除时触发,插入时触发:

删除时的触发器将获取已删除的 id 并将其插入到 id 池表中(只有一列id

插入之前的触发器将检查是否提供了 id 值,否则它只是查询 id 池表(例如:SELECT MIN(id) FROM id_pool_table)并分配它(ig 从 id_pool_table 中删除它)