complex1(field2,field3)
結果を検索して並べ替えるためtable1
のindex order1(field10)
インデックスがあります。これtable1
は MySQL IndoDB テーブルです。サブクエリでは、インデックスを使用して値を取得しようとしcomplex1
、メインクエリでは、order1
インデックスを使用してそれらを並べ替え、最初の 50 のみを残します。
EXPLAIN(
SELECT `t1`.`field1`,`t1`.`field10` from `database`.`table1` `t1` INNER JOIN
(SELECT `field1` FROM `database`.`table1` WHERE
`field2` >= 'val1' and `field2`<='val2' `and `field3` >= 'val3' and `field3`<='val4'
) as e1
ON e1.`field1`=t1.`field1` ORDER BY t1.`field10` LIMIT 50)
結果は次のとおりです。
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 13 "Using temporary; Using filesort"
1 PRIMARY t1 eq_ref PRIMARY PRIMARY 4 e1.field1 1
2 DERIVED table1 range complex1 complex1 8 NULL 13 "Using where; Using index"
私が見るようにcomplex1
、使用されてorder1
いません。なんで?