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

mysql:14073

From: YuGo <YuGo <yu.gotou@xxxxxxxxxx>>
Date: Fri, 22 Jun 2007 15:13:54 +0900
Subject: [mysql 14073] Re: ビューをWHERE条件付きでSELECTすると遅くなる

bm2dx.dd@xxxxxxxxxxどの。
C.F2にはインデックスがあるがV.CF2にはインデックスがつけられないので
遅いということはないですか。ためしに下のようなテーブルを作って、
tmp_tbl.CF2にインデックスをつけてみたらどうですか。
CREATE tmp_tbl  SELECT A.F1 AF1, A.F2 AF2, B.F1 BF1, B.F2 BF2,C.F1 CF1,
C.F2 CF2 FROM A LEFT JOIN B ON A.ID = B.ID LEFT JOIN C ON A.ID = ID
WHERE A.F1 = 1 AND B.F1 = 1;

> はじめまして、お世話になります。
> VIEWの使用で困っています。
> あるVIEWを作りました。
> 以下のような感じのVIEWです。(説明のために簡略化しています。)
> テーブルA, B, C は1万件程度のレコード数です。(A:B = 1:n  A:C = 1:n)

> CREATE VIEW V AS
> SELECT A.F1 AF1, A.F2 AF2, B.F1 BF1, B.F2 BF2, C.F1 CF1, C.F2 CF2
> FROM A
> LEFT JOIN B ON A.ID = B.ID
> LEFT JOIN C ON A.ID = C.ID
> WHERE A.F1 = 1 AND B.F1 = 1;
> 
> (1) SELECT * FROM V;
> を実行すると、0.1秒以下で完了します。
> 
> (2) SELECT * FROM V WHERE CF2 = 1;
> を実行したところ、60秒くらいかかってしまいます。
> 
> でも、
> 
> (3)
> SELECT A.F1 AF1, A.F2 AF2, B.F1 BF1, B.F2 BF2, C.F1 CF1, C.F2 CF2
> FROM A
> LEFT JOIN B ON A.ID = B.ID
> LEFT JOIN C ON A.ID = C.ID
> WHERE A.F1 = 1 AND B.F1 = 1 AND C.F2 = 1
> 
> というSELECT文を実行すると0.1秒以下で完了します。
> 
> VIEWにWHERE句を入れると遅くなったりするのでしょうか?
> それとも、テーブル構造や結合の仕方でネックになっている部分があるのでしょ 
> うか。
> (2)と(3)で、そんなにコストが変わるとは予想していませんでした。
> 
> OSはFedora Core 6
> MySQLは 5.0.41-log Source distribution
> を使用しています。
> 
> 

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

     14072 2007-06-22 12:43 [<bm2dx.dd@xxxxxxxxxx] ビューをWHERE条件付きでSELECTすると遅くなる
->   14073 2007-06-22 15:13 ┗[YuGo <yu.gotou@xxxxx]                                       
     14079 2007-06-22 21:22  ┗[hyu-ga <bm2dx.dd@xxx]                                     
   @ 14082 2007-06-23 09:15   ┗["Yu Go" <yotarog@xxx]