2010-02-16 66 views
0

我可以防止在mysql中使用filesort時,在哪個條件字段上的某個表中的哪個字段和哪個字段上的另一個順序。在這種情況下可以使用索引嗎?這兩個表都很大 - 超過100萬條記錄mysql按性能排序

回答

3

您正在處理100萬條記錄,當然您需要添加索引才能獲得一定的速度,否則會影響訪問您網站的任何人。

您需要仔細檢查您將要添加索引的字段。謝謝

+0

謝謝,但mysql使用「order by」和「where」操作的索引僅當在「where」子句和order by exists索引中使用的所有字段中。但是,當這個字段在不同的表中時,我能創建這樣的索引嗎 – Andrew 2010-02-16 09:01:32

+0

當然,我可以在兩個表中重複哪個順序的字段,但是這會減少插入/更新/刪除操作的性能並增加使用磁盤空間:) – Andrew 2010-02-16 09:03:57

+0

@Andrew:是的,您必須決定是否要選擇或更新數據庫。 – Sarfraz 2010-02-16 11:22:47

0

你需要仔細看看索引使用解釋。

如果有where子句,或者將您正在排序的列添加到該表所用的索引,並查看它是否擺脫了filesort,或者它當前沒有使用那個表(它我懷疑是那麼多的記錄)然後只是創建一個新的。

還有一點值得注意的是,其他人可能會提供更多信息,是mysql經常(或總是)不能使用索引來對DESC進行排序 - 我已經處於一種情況表現爲具有將以相反順序編制索引的計算字段,並由該ASC進行排序。 EG:如果您有一個要通過DESC排序的整數字段,請添加一個字段,您可以在該字段中存儲從1000000000(或某個其他大數字)中減去的整數值,對其進行索引,然後按該字段的升序進行排序。

正如我所說,我不記得具體細節,它可能會影響較舊的MySQL或其他東西,但有一種感覺,它目前的侷限性。