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

mysql:14072

From: <bm2dx.dd@xxxxxxxxxx>
Date: Fri, 22 Jun 2007 12:43:31 +0900
Subject: [mysql 14072] ビューをWHERE条件付きでSELECTすると遅くなる

はじめまして、お世話になります。
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]