0
我碰到了一些情況,我的新手級別的SQL經驗已經達到了匹配。查詢調優 - 使用likes的多個加入條件
我有一個查詢
SELECT a.One,
a.Two,
a.Three,
a.Four,
b.One,
b.Two
FROM table1 a
INNER JOIN table2 b on b.Four = a.Nine
and b.Six like a.One
and b.Seven like b.Two
- 表1爲25000行
- 表2爲22萬行
- like子句是這樣的 '測試%',所以應該利用我的索引我不認爲我需要一個全文索引,因爲它的尾隨而不是前面的。
- 我有一個存在的索引,當我使用直等於而不是類似的時候非常有效。
當我查看查詢計劃時,發現我正在瀏覽table2中的每一行(我很驚訝)。內部聯接如何根據首先執行的內容工作?它是否將三列結合爲一體?或者加入第一欄,然後是第二欄,然後是第三欄。
有沒有更好的方法來寫這個查詢?
你可以發佈1)SHOW CREATE TABLE
對於性能問題,您應該始終包含您正在使用的數據庫。 –
回答
問題是索引只能用於一個
like 'pattern%'
的比較。這是不等式,因此索引使用停止在第一個。你可能會通過更改查詢到
union
抱有僥倖心理:然後,設置索引上
a(Nine, One)
和b(Four, Two)
。雖然這兩個子查詢應該使用索引,但您可能會得到大量匹配,以減緩查詢的中間結果。來源
2015-05-19 20:45:49
根據所使用的RDBMS以及它如何維護和應用索引統計信息,您可能需要(一,九)和/或b(二,四)。 –
相關問題