[英]Want to improve SQL query
我有一張叫做“世界”的桌子。 它有一些空ID:
id - data
1 - ...
2 - ...
(no 3,4 IDs after 2)
5 - ...
我有一個查詢來選擇此表中最低的未使用ID。 看起來像:
SELECT MIN(t1.id)
FROM
(
SELECT 1 AS id
UNION ALL
SELECT id + 1
FROM world
) t1
LEFT OUTER JOIN world t2
ON t1.id = t2.id
WHERE t2.id IS NULL;
我想找到一種方法來改進此查詢以使其執行得更快。
您可以執行以下操作:
select (w.id + 1)
from world w left join
world w2
on w.id = w2.id - 1
where w2.id is null
order by w.id
limit 1
在world(id)
上具有索引的情況下,應該具有合理的性能。
SQLFiddle用於相同的SQL
這將為您提供第一個未使用的ID后的第一個未使用的ID(即,如果未使用ID,則不會給您ID 1,但其余的ID都可以使用)。
SELECT id + 1 FROM world WHERE (id + 1) NOT IN (
SELECT id FROM world
) ORDER BY id ASC LIMIT 1
要包含ID 1,您可以先進行特定檢查以查看其是否存在,或者執行以下操作:
SELECT IF(
NOT EXISTS(SELECT id FROM world WHERE id = 1),
1,
(SELECT id + 1 FROM world WHERE (id + 1) NOT IN (
SELECT id FROM world
) ORDER BY id ASC LIMIT 1)
) AS min_unused
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.