[前][次][番号順一覧][スレッド一覧]

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


以上、よろしくお願いします。




[前][次][番号順一覧][スレッド一覧]