mysql:13016
From: MITSUGI kiyoshi <MITSUGI kiyoshi <kiyoshi@xxxxxxxxxx>>
Date: Tue, 23 May 2006 01:46:31 +0900
Subject: [mysql 13016] サブクエリーの書き方と処理速度について
広島の三ツ木と申します。
Mac OS X 10.4.6
MySQL 5.0.21
の環境で、
CREATE TABLE hoge (hoge_cd CHAR(5))
CREATE TABLE kensaku (kensaku_kubun_cd CHAR(2), kensaku_kye_cd CHAR(2),
kensaku_hoge_cd CHAR(5))
という感じでテーブルを作っています。kensakuテーブルに、hogeテーブル
の関連事項を複数登録しています。ある関連事項で登録されているhoge_cd
を抽出するため、サブクエリーを利用して下記SQL文を実行した所、22秒ほ
どかかってしまいました。
SELECT hoge_cd FROM hoge WHERE hoge_cd IN (SELECT DISTINCT
kensaku_hoge_cd
FROM kensaku WHERE kensaku_hoge_cd = ANY ( SELECT kensaku_hoge_cd FROM
kensaku WHERE ( kensaku_kubun_cd = '01' AND kensaku_key_cd IN ('01' ,
'02'
, '03' , '04'))) AND kensaku_hoge_cd = ANY ( SELECT kensaku_hoge_cd FROM
kensaku WHERE ( kensaku_kubun_cd = '02' AND kensaku_key_cd IN ('01' ,
'02'
, '03' , '04'))));
最初の部分をとって、
SELECT DISTINCT kensaku_hoge_cd
FROM kensaku WHERE kensaku_hoge_cd = ANY ( SELECT kensaku_hoge_cd FROM
kensaku WHERE ( kensaku_kubun_cd = '01' AND kensaku_key_cd IN ('01' ,
'02'
, '03' , '04'))) AND kensaku_hoge_cd = ANY ( SELECT kensaku_hoge_cd FROM
kensaku WHERE ( kensaku_kubun_cd = '02' AND kensaku_key_cd IN ('01' ,
'02'
, '03' , '04')));
だけであればすぐに検索結果が返ってきます。これは最初の“hoge_cd IN”の
後の
カッコの中のSQL文の書き方が悪いのだと思いますが、どのような書き方が良
いの
でしょうか。
よろしくお願いします。
----------------------------
MITSUGI, kiyoshi
kiyoshi@xxxxxxxxxx
http://www.mitsugi.jp/
----------------------------
-> 13016 2006-05-23 01:46 [MITSUGI kiyoshi <kiy] サブクエリーの書き方と処理速度について 13017 2006-05-23 08:37 ┗[MITSUGI kiyoshi <kiy] 13018 2006-05-23 09:09 ┗["F.Y" <fumi_sby@xxxx] 13019 2006-05-23 09:14 ┣["F.Y" <fumi_sby@xxxx] 13020 2006-05-23 10:06 ┗[MITSUGI kiyoshi <kiy]