我有一個查詢,其中有多個表使用distincct - 左連接 - order by - limit子句連接。MySQL查詢優化與表的數量加入和按限制條款排序
查詢看起來是這樣的: -
Select DISTINCT a.col1, b.col2, c.col3, d.col4, e.col5, f.col6, g.col7, h.col8,
i.col9, j.col10
From test_a a
left join test_b b on a.col1 = b.col2
left join test_c c on c.col1 = d.col2
left join test_d d on d.col1 = c.col2
left join test_e e on e.col1 = d.col2
left join test_f f on f.col1 = e.col2
left join test_g g on g.col1 = f.col2
left join test_h h on h.col1 = a.col1
left join test_i i on i.col1 = f.col2
left join test_j j on j.col1 = i.col2
Where a.col2 = 'Y'
and c.col4 = 1
Order by h.col5 desc
limit 50;
所有列中使用的在coditions有指標就可以了。並解釋這個查詢的輸出結果集,在那裏我可以看到它使用所有索引正確,它從所有表中掃描的總行數是18000.
我在這個查詢中想知道的是: - 這個查詢運行在幾秒鐘內我運行它沒有條款的順序。像這樣: -
Select DISTINCT a.col1, b.col2, c.col3, d.col4, e.col5, f.col6, g.col7, h.col8,
i.col9, j.col10
From test_a a
left join test_b b on a.col1 = b.col2
left join test_c c on c.col1 = d.col2
left join test_d d on d.col1 = c.col2
left join test_e e on e.col1 = d.col2
left join test_f f on f.col1 = e.col2
left join test_g g on g.col1 = f.col2
left join test_h h on h.col1 = a.col1
left join test_i i on i.col1 = f.col2
left join test_j j on j.col1 = i.col2
Where a.col2 = 'Y'
and c.col4 = 1
limit 50;
如果我用order by子句運行它,則需要30-40秒執行。
我嘗試使用mysql:- USE INDEX FOR ORDER BY (idx_h_col5)
提供的索引提示功能,但我在執行此查詢時出現語法錯誤。錯誤消息說不正確的語法附近
我有一個組合索引在按順序使用的子句。我也嘗試在這個列上創建一個索引,但沒有任何真正的工作。
任何輸入將是很大的幫助。
在此先感謝。
問候, 瑪納斯
多少行做的表有一個簡單的指標?如果您提供了有序查詢的執行計劃,這將有所幫助。表的結構(PK,FKs)和現有的索引。 –
大多數表格都有百萬行以上的行。我會得到解釋的輸出並把它放在這裏。謝謝 –