2013-01-03 40 views
0

我有一個表entrytable,具有colums datumusernamestatusstatus_spam_userstatus_spam_systemtext如何在簡單的MySQL查詢中設計索引/查詢以避免文件夾?

我想選擇列文本的內容,從具有一定值usernamestatusstatus_spam_userstatus_spam_system行。由於這可能導致一長串條目(> 30'000)我想限制匹配行的數量。在此之前,匹配行應按列datum排序。

SELECT text 
FROM entrytable 
WHERE user = 'username' && 
`status` = '1' && (
    `status_spam_user` = 'no_spam' 
    || (
     `status_spam_user` = 'neutral' && 
     `status_spam_system` = 'neutral' 
    ) 
) 
ORDER BY datum DESC 
LIMIT 6430 , 10 

我添加兩個索引表中:

  • index_datum(基準面)
  • index_status_mit_spam(用戶,狀態,status_spam_user,status_spam_system)

對於該查詢的索引index_status_mit_spam用來。由於索引不包含列datum的信息,因此排序必須單獨進行(即filesort)。有沒有可能以某種方式設計我的查詢/索引,它對WHERE以及ORDER BY有用?

+0

請發表解釋計劃.. –

回答

2

添加上status_spam_user (user, status, datum) 索引的索引/ status_spam_system不能因爲OR條件(它是用來到狀態的部分),和索引的所有先前的部分已經到訂單之前使用使用部分可以滿足索引