首頁 >資料庫 >mysql教程 >UNION ALL with LIMIT 1 能否有效率地模擬順序查詢?

UNION ALL with LIMIT 1 能否有效率地模擬順序查詢?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-04 14:59:45679瀏覽

Can UNION ALL with LIMIT 1 Efficiently Simulate Sequential Queries?

使用UNION ALL 的順序選擇性查詢

問題:
在資料庫表中找出單行逐漸減少搜尋條件。例如:

SELECT * FROM image WHERE name LIKE 'text' AND group_id = 10 LIMIT 1

如果沒有得到結果,則執行:

SELECT * Fname ROMage WHERE LIKE 'text' LIMIT 1

如果仍然沒有結果,執行:

SELECT * FROM image WHERE group_id = 10 LIMIT 1

這個過程可以用單一執行嗎表達式?

解法:

SELECT * FROM image WHERE name = 'name105' AND group_id = 10
UNION ALL
SELECT * FROM image WHERE name = 'name105'
UNION ALL
SELECT * FROM image WHERE group_id = 10
LIMIT 1;

解法:

  • UNION個SELECT語句的結果合併為一個LIMIT 子句指定僅應傳回組合結果的第一行。
  • (name, group_id) 和 (group_id) 上的索引對於效能至關重要。
  • 這個查詢特別高效,因為 PostgreSQL 會最佳化執行計劃,一旦超過 LIMIT 就停止處理額外的 SELECT 語句滿意。
通用解決方案:

透過在 UNION ALL 鏈中加入額外的 SELECT 語句,可以將上述方法推廣到任意數量的搜尋參數。

排序的注意事項結果:

由於 LIMIT 子句適用於整個結果,因此排序並不是特別有用,因為只會傳回第一行。

以上是UNION ALL with LIMIT 1 能否有效率地模擬順序查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn