mysql:14561
From: "なかで" <"なかで" <nakade@xxxxxxxxxx>>
Date: Fri, 16 May 2008 15:10:49 +0900
Subject: [mysql 14561] 片方のテーブルに存在しないデータを取得するSQL
中出と申します。 2つのテーブルがA、Bがあり、Aのあるフィールドの値が Bのフィールドに存在しないか、部分一致もしない場合に 取り出したいと思っています。 それで、以下のようなSQLを作成したのですが、Aのデータが 3万件、Bのデータが1000件をこえたあたりから、 mysqlの反応がなくなるようになりました。 EXPLAIN SELECT count( * ) AS cnt FROM `A` LEFT JOIN `B` ON ( `B`.`email` != '' AND ( `B`.`email` = `A`.`email` OR INSTR( `A`.`email` , `B`.`email` ) >0 ) ) WHERE `B`.`email` IS NULL データがふえても動くようにするにはどのようなSQLに したらよいでしょうか? ●テーブル create table A ( name varchar(50), email varchar(255), UNIQUE KEY `email` (`email`) ); create table B ( email varchar(255), cnt int, UNIQUE KEY `email` (`email`) ); ●mysqlのバージョン 4.0.23 以上、よろしくお願いします。