Using temporary; Using filesort を回避したい
はじめまして。よろしくお願いします。
下記の場合、Using temporary; Using filesort を回避するには
どうしたらよいでしょうか。
次の 2 つのテーブルがあります。
CREATE TABLE `test1` (
`f1` int(11) NOT NULL,
`f2` int(11) NOT NULL,
PRIMARY KEY (`f1`,`f2`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `test1` VALUES ('1', '2');
INSERT INTO `test1` VALUES ('1', '3');
INSERT INTO `test1` VALUES ('1', '4');
INSERT INTO `test1` VALUES ('2', '1');
INSERT INTO `test1` VALUES ('2', '3');
CREATE TABLE `test2` (
`f1` int(11) NOT NULL,
`f2` varchar(20) default NULL,
`f3` varchar(20) default NULL,
PRIMARY KEY (`f1`),
KEY `ix_f2_f3` (`f2`,`f3`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `test2` VALUES ('1', 'A', 'a');
INSERT INTO `test2` VALUES ('2', 'B', 'b');
INSERT INTO `test2` VALUES ('3', 'C', 'c');
INSERT INTO `test2` VALUES ('4', 'D', 'd');
次の SELECT を実行すると Using temporary; Using filesort が
現れてしまいます。
explain select test2.f2, test2.f3
from test1, test2
where test1.f1 = 1 and test1.f2 = test2.f1
order by test2.f2, test2.f3;
order by ... をなくすと問題ないのですが、ソートは必要です。
複数のキーに対してORDER BYを実行する場合
インデックスを使用できないとあるので
ix_f2_f3 は使用されず Using filesort となるのはわかるのですが、
Using temporary となる理由と回避方法がわかりません。
ご教示よろしくおねがいいたします。
お礼
はぁ~なるほど!! FROM の中に先にトップ2を作ることが出来るのですね。 その方法、記述を知らなくてトップ2の一時テーブルを作ってしのいでいました。 お礼が遅くなって申し訳ありません。 いつも、ありがとうございます。