0

entrytable、、、、、およびの列datumusername持つstatusテーブルがstatus_spam_userありstatus_spam_systemますtext

usernamestatus、 、status_spam_userの特定の値を持つ行から、列テキストの内容を選択したいstatus_spam_system。これによりエントリのリストが長くなる可能性があるため (>30'000)、一致する行の数を制限したいと考えています。その前に、一致する行を column で並べ替える必要があります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

テーブルに 2 つのインデックスを追加しました。

  • index_datum (データム)
  • index_status_mit_spam (ユーザー、ステータス、status_spam_user、status_spam_system)

このクエリでは、インデックスindex_status_mit_spamが使用されます。インデックスには列の情報が含まれていないためdatum、ソートは個別に行う必要があります (つまり、ファイルソート)。WHEREクエリ/インデックスを、だけでなく にも役立つように設計することは可能ORDER BYですか?

4

1 に答える 1

2

インデックスを status_spam_user/status_spam_systemのインデックスに追加する(user, status, datum) OR 条件のため使用できず (ステータス部分まで使用されます)、部分ごとの順序が満たされる前に、インデックスの前の部分をすべて使用する必要がありますインデックス

于 2013-01-03T14:10:59.700 に答える