2つのテーブルtestaとtestbがあります。
CREATE TABLE `testa` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) DEFAULT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `testb` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) DEFAULT NULL,
`aid1` INT(10) DEFAULT NULL,
`aid2` INT(10) DEFAULT NULL,
`aid3` INT(10) DEFAULT NULL,
PRIMARY KEY (`id`)
);
現在、testaテーブルのidがtablebのaid1、aid2、aid3の任意の列と一致するすべての行を取得するために、以下のクエリを実行しています。クエリは正確な結果を取得していますが、実行に最低30秒かかり、長すぎます。UNIONを使用してクエリを最適化しようとしましたが、失敗しました。
SELECT a.id, a.name, b.name, b.id
FROM testb b
INNER JOIN testa a ON b.aid1 = a.id OR b.aid2 = a.id OR b.aid3 = a.id ;
クエリを最適化して、合計実行時間が2〜3秒以内になるようにするにはどうすればよいですか?
前もって感謝します...
EXPLAINの結果:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE b ALL idx_aid1,idx_aid2,idx_aid3 (NULL) (NULL) (NULL) 10940
1 SIMPLE a ALL PRIMARY (NULL) (NULL) (NULL) 7512 Using where; Using join buffer