2015-12-01 41 views
0

我有以下兩個查詢,這是在基本相同的ID(主鍵)的列表是查詢的一個結果 -這個子查詢爲什麼要執行表掃描?

enter image description here

似乎瘋了,這是做了當該查詢似乎應該通過子查詢中的PK進行搜索時,然後在外部查詢中搜索(再次)PK。

爲什麼mysql的執行計劃會這樣做?有什麼方法可以解決它,除了做一個ID預取 - 也就是兩個查詢而不是一個?

+7

您的查詢全部爲3條短信線路。當你幾乎可以立即剪切/粘貼實際的查詢文本時,爲什麼要做出難以理解的截圖呢? –

+1

我相信當涉及OR時,MySQL會利用索引的優勢。 '接近重複'SELECT'(以及不同條件)的UNION通常是解決方案。此外,如果適用,'JOIN'往往比'WHERE'子句中的子查詢更好地執行。 – Uueerdo

+0

你有足夠多的足夠的代表來理解如何正確地寫一個問題。這個屏幕截圖最多是無法讀取的...... – Siyual

回答

2

表掃描可以是查找速度最快的方法,尤其是如果整個表緩存在RAM中(通常是這種情況)。

當表在內存中,並且索引不是或不完全時,執行掃描便宜,而不是將索引從硬盤驅動器中卸載。

嘗試更新表格上的統計信息並查看是否得到相同的結果。

ANALYZE TABLE table_name; 

您應該發佈類似於mysql版本和表結構的東西,以便進一步幫助。

0

您可以爲MySQL指定使用FORCE INDEX的索引。這不是很優雅,但在極少數情況下,這個決定是合理的。

相關問題