簡體   English   中英

想要改善SQL查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM