2017-09-28 60 views
-1

我們必須與列A,B和C 現在我們想要做如下格式的查詢多列索引(大)表: SELECT * FROM table WHERE (B=... AND C=...) OR (B=... AND C=...) OR ... 因爲有很多表中的行,並且沒有使用索引,查詢的性能非常差。MySQL的 - 跳過列索引

列B,C的索引本來是理想的,遺憾的是它不可用,我們也無法改變它(其他供應商)。 A列有一個我們不感興趣的值。

爲了讓MySQL使用可用的索引,我們在WHERE中添加了一個額外的條件:SELECT * FROM table WHERE (A IN (1, 2, 3, 4, 5, ..., 99, 100)) ((B=... AND C=...) OR (B=... AND C=...))OR ...。結果是,現在索引已被正確使用,並且查詢性能已經好很多。然而,在查詢中提供A的所有可能的值看起來有點難看。我的感覺是,應該有一個更簡單的方法來做同樣的事情,或者更好的表現。

有沒有辦法強制MySQL使用索引,即使列A沒有在查詢中使用?或者我們已經找到最好的解決方案?

回答

0

是的,可能會工作!

MySQL index hint

基本上說FROM table USE INDEX (index_name)FROM table FORCE INDEX (index_name)

但是,這不會幫助,因爲基本上如果強制索引,它的背部做一個全表掃描。

嘗試,而不是

FROM table 
WHERE A IN (SELECT DISTINCT A FROM table) 
AND .... 

可能是清潔

+0

對不起,不是我的回答做了,想說的話,它不會工作!並測試清潔版本 –