text
から列の内容を選択したいentrytable
。
EXPLAIN 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
テーブルには3つのインデックスがあります。
- index_user(ユーザー)
- index_datum(データム)
- index_status_mit_spam(status、status_spam_user、status_spam_system)
EXPLAINの結果は次のとおりです。
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE entrytable ref index_user,index_status_mit_spam index_user 32 const 7800 Using where; Using filesort
possible_keys
MySQLが使用する可能性のあるインデックスとkeys
、MySQLが実際に使用するインデックスはありますか?- インデックス
index_status_mit_spam
が使用されないのはなぜですか?クエリでは、列の順序はインデックスと同じです... - インデックス
index_datum
が使用されないのはなぜORDER BY
ですか? - テーブルインデックスまたはクエリを最適化するにはどうすればよいですか?(上記のクエリには、テーブルに約100万のエントリがある場合、最大3秒かかります)