MySQL IN 子句中多列高效能查詢
你的MySQL 資料庫有四列,分別對應地理座標x,y 和結束位置。您希望使用大約一百個地理對組合的清單對此資料執行有效查詢。
強力方法是使用IN 子句,如Oracle 答案中所建議的:
SELECT * FROM my_table WHERE (x0, y0, x1, y1) IN ((4, 3, 5, 6), ... ,(9, 3, 2, 1));
但是,這種方法對於MySQL 來說效率不高,尤其是在有大量行的情況下。
為了最佳化查詢,我們可以利用這四列上的索引。我們可以將 IN 謂詞重寫為一系列 OR 條件:
( ( x0 = 4 AND y0 = 3 AND x1 = 5 AND y1 = 6 ) OR ( x0 = 9 AND y0 = 3 AND x1 = 2 AND y1 = 1 ) )
透過使用單獨的條件,我們強制 MySQL 對每個條件使用索引,從而顯著提高查詢效能。
較新 MySQL 版本的注意事項
在較新版本的 MySQL 中,優化器已得到改進,可以產生更有效率的執行計劃。 (a,b) IN ((7,43),(7,44),(8,1)) 語法已經支援很久了,但早期版本遇到了效能問題。不過,這些問題已經解決,較新的優化器可以有效地使用 OR 建構的索引。
結論
透過使用 OR 條件方法,您可以顯著改善在 IN 子句中搜尋多個列時 MySQL 查詢的效率。該技術利用可用索引並確保大型資料集的最佳效能。
以上是如何在 IN 子句中使用多列高效率地查詢 MySQL?的詳細內容。更多資訊請關注PHP中文網其他相關文章!