2017-09-14 124 views
-2

我正在執行查詢5 連接和一些wheres。解釋查詢是毫無意義的,但奇怪的部分來自where子句之一。MySQL需要太多的時間來執行不同的值

當我運行:... where foo in (2)查詢需要0.5秒執行,結果集包含235行。

運行相同的查詢替換2與9 ... where foo in (9)需要3,2(!)執行給我一個集合只有 151行。

在這一點上,我認爲來自第二個查詢的集合的大小或類似的東西。因此,我運行相同的查詢結合值:... where foo in (2,9)和哦驚喜,查詢只用了0.7秒顯示一組386行(兩個查詢結果組合)。

發生了什麼事? MySQL在編號9時有問題嗎?我完全迷失在這裏。

在此先感謝

PS:我用PHP框架和ORM工作。當我發現查詢花費了很多時間時,我直接進入數據庫進行測試。上述結果來自這些測試。

+0

列'foo'是索引嗎?如果不在該列上創建索引並重試。 –

+0

是的,它是@ EasyJoin.net – viarnes

+0

添加完整的查詢,也許在連接和你認爲毫無意義的事情並不那麼毫無意義。 –

回答

0

MySQL的查詢規劃器可以對錶格統計信息做一些神祕的事情,決定執行索引掃描或表掃描,或許是基於陳舊的信息。

您可以在一個或多個表嘗試

OPTIMIZE TABLE tablename; 

把它使用最新的統計信息。

不,它並不討厭價值9

在測試查詢性能時,如果您重複查詢,則查詢應該說SELECT SQL_NO_CACHE whatever而不僅僅是SELECT whatever,否則服務器可能只從緩存中提供整個結果集。這比重新計劃和重新運行查詢要快得多。

編輯如果這些建議不起作用,您需要逐個深入查詢您的問題並找出問題所在。使用EXPLAIN。閱讀http://use-the-index-luke.com/如果您問另一個SO問題尋求幫助,請首先閱讀,特別是關於查詢優化的部分。 http://meta.stackoverflow.com/a/271056/

不幸的是,如果你不能或不會向我們展示一個完整的性能問題查詢,我們在SO上將無法爲你提供幫助。這是因爲各種古怪的東西都會影響查詢性能。

+0

這兩個建議沒有區別:((和順便說一句,我只是在開玩笑的9號問題) – viarnes