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

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]