2012-03-04 34 views
2

這可能是一個愚蠢的問題。我有超過3000萬條記錄。Mysql-這是一個很好的優化查詢嗎?

Table 1 

Column A(int) - Column B(Boolean) - Column C(int) - Column D(DateTime) 

我將在(A,B,C,D)上有一個複合索引。

以下是查詢:

Select * from table1 where A=12 and B!=0 ORDER BY C DESC ,D ASC. 

由於Order by C DESC and D ASC是不可能的。每次插入記錄時,我都會將C與(-1)相乘,然後進行反向排序。

現在我試圖執行查詢將是:

Select * from table1 where A=12 and B!=0 ORDER BY C ASC ,D ASC. 

考慮到where條款兩個標準和order by,將在上面的查詢充分利用索引?或者還有其他更好的解決方案嗎?

回答

4

有一個非常有用的SQL命令,稱爲EXPLAIN。

它的確如此 - 解釋了RDBMS如何處理計算查詢。

http://dev.mysql.com/doc/refman/5.0/en/explain.html

+0

感謝您的回覆。很抱歉,我目前沒有訪問mysql數據庫,需要一段時間才能做這個測試。如果你能讓我知道背後的理論背後的理論是什麼?可能提供一些很好的選擇,我相信我沒有任何想法abt。 – user1248331 2012-03-04 19:31:50

+0

說實話,它完全取決於設置,基數的記錄等。基本上,查詢優化器背後的科學和藝術相當微妙,而且非常具體。 – qdot 2012-03-05 16:38:41

0

存儲在C列底片所以用ORDER BY C DESC, D ASC查詢可以更改爲ORDER BY C ASC, D ASC並使用該指數是一個不錯的主意。如果你還沒有要求其他排序(ASC, ASCDESC, DESCDESC, ASC沒關係任何其他查詢。

但我也將改變B != 0條件B = 1。優化可能沒那麼聰明,以確定這些爲相同的,可用沒有正確使用索引(或根本不使用索引)