以下の説明を返すクエリがあります:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE this_ index_merge CategoryId,Deleted,PublishedOn,_ComputedDeletedValue,_Temporary_Flag,Published,_TestItemSessionGuid Deleted,_ComputedDeletedValue,_Temporary_Flag,Published 1,1,1,1 6203 Using intersect(Deleted,_ComputedDeletedValue,_Temporary_Flag,Published); Using where
これは、クエリがどこでもインデックスを使用していることを示していますか、それとも他のインデックスを追加することで改善できますか?これに基づいて:http ://dev.mysql.com/doc/refman/5.1/en/explain-output.html 、key
列には実際に使用されたインデックスが表示されていると記載されています。すべての列にインデックスがあります。
問題のクエリは次のとおりです。
SELECT SQL_NO_CACHE count(*) FROM
article this_
WHERE
(this_._Temporary_Flag = 0 OR this_._Temporary_Flag = NULL) AND
this_.Published = 1 AND
(this_.PublishedOn IS NULL OR this_.PublishedOn <= '2012-10-30 18:46:18 ') AND
(this_.Deleted = 0 OR this_.Deleted = NULL) AND
(this_._ComputedDeletedValue = 0 OR this_._ComputedDeletedValue = NULL) AND
((this_._TestItemSessionGuid IS NULL OR this_._TestItemSessionGuid = ''))
AND NOT (this_.CategoryId IS NULL)
テーブルには約140,000レコードがあります。このクエリの実行には3秒かかり、結果として135,725が返されます。