良い質問。
インデックスは左から右に機能するため、WHERE
条件はインデックスを使用します。この場合、並べ替えはインデックスも利用します (以下の実行計画)。
マニュアルから:
がインデックスと正確に一致しない場合でもORDER BY
、インデックスの未使用部分とすべての余分な列が句ORDER BY
内の定数である限り、インデックスを使用することもできます。WHERE
次のクエリは、インデックスを使用してORDER BY
パーツを解決します。
SELECT * FROM t1
WHERE key_part1=constant
ORDER BY key_part2;
単一の列インデックス ( accountid
) がある場合は、代わりにファイルソートが使用されます。したがって、クエリはそのインデックスの恩恵を受けます。
2 列のインデックス
create table t1 (
accountid tinyint,
logindate date);
create index idx on t1 (accountid, logindate);
insert into t1 values (1, '2012-09-05'), (2, '2012-09-09'), (3, '2012-09-04'),
(1, '2012-09-01'), (1, '2012-09-26'), (2, '2012-05-16'),
(1, '2012-09-01'), (3, '2012-10-19'), (1, '2012-03-01')
実行計画
ID SELECT_TYPE テーブル タイプ POSSIBLE_KEYS KEY KEY_LEN REF ROWS FILTERED EXTRA
1 SIMPLE t1 ref idx idx 2 const 5 100 where を使用します。インデックスの使用
単一列インデックス
create table t1 (
accountid tinyint,
logindate date);
create index idx on t1 (accountid);
insert into t1 values (1, '2012-09-05'), (2, '2012-09-09'), (3, '2012-09-04'),
(1, '2012-09-01'), (1, '2012-09-26'), (2, '2012-05-16'), (1, '2012-09-01'),
(3, '2012-10-19'), (1, '2012-03-01')
実行計画
ID SELECT_TYPE テーブル タイプ POSSIBLE_KEYS KEY KEY_LEN REF ROWS FILTERED EXTRA
1 SIMPLE t1 range idx idx 2 5 100 where を使用。ファイルソートの使用