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]