私たちのアプリケーションでは、MySQL からのレコードを Web ページに表示しています。そのようなほとんどのアプリケーションと同様に、ページングを使用します。したがって、クエリは次のようになります。
select * from sms_message
where account_group_name = 'scott'
and received_on > '2012-10-11' and
received_on < '2012-11-30'
order by received_on desc
limit 200 offset 3000000;
このクエリには 104 秒かかります。オフセットを低いものに変更するか、完全に削除すると、わずか0.5秒です。何故ですか?
複合インデックスは 1 つだけで、account_group_name、received_on、および他の 2 つの列です。テーブルは InnoDB です。
アップデート:
返品について説明する:
1 SIMPLE sms_message ref all_filters_index all_filters_index 258 const 2190030 Using where
all_filters_index は、上記の 4 列のフィルターです。