2016-05-11 32 views
2

我最近才知道,我可以使用下面的SELECT語句或跨多個列的MySQL表進行搜索:如何在使用OR時優化在MySQL表中的搜索?

SELECT * data WHERE TEMP = "3000" OR X ="3000" OR Y="3000"; 

它返回所需的結果,但它確實需要大約1.7秒至返回的結果只有〜260k行的表格。我也已經爲每個搜索的列添加了索引。

有沒有辦法來優化這個查詢?還是有另一個更快,但返回相同的結果?

回答

1

另一種選擇是使用UNION ...

SELECT * FROM data WHERE TEMP = "3000" 
UNION 
SELECT * FROM data WHERE X ="3000" 
UNION 
SELECT * FROM data WHERE Y="3000"; 

...但是真正關鍵是提高性能指標,首先和第二查詢分析器。通常情況下,數據決定哪一個更快,因爲TEMP可能比Y是「3000」的可能性低一百倍 - 因此,例如應該首先在您的原始OR語句中。

+0

嗯,我得到一個語法錯誤'附近的數據,TEMP =「3000」'。但是我明白了關於查詢結構的觀點。對於此查詢,TEMP列可能會返回3000結果。 編輯:請將'from'添加到答案中。結果是0.05秒。我相信這可能是我能得到的最好的。 –

+1

@ AhmedAl-haddad很抱歉 - 沒有經過測試,我錯過了FROM關鍵字! – Barry

+0

我想驗證一下,如果我從'TEMP = 3000'到'TEMP> 3000'或'TEMP <3000'的查詢改變了,需要花費大量的時間(10s〜)才能得到結果。我該如何解決這個問題? (返回的結果是超過200K行) –