mysql:8304
From: "Takashi Matsui" <"Takashi Matsui" <k_matsui@xxxxxxxxxx>>
Date: Tue, 21 Oct 2003 00:15:16 +0900
Subject: [mysql 08304] where 節で指定する値で実行が遅くなる
はじめまして松井と申します。 社内業務効率化のため、初めてMySqlを使用して 検索システムを構築しております。 その中でwhereで指定する値によって処理時間に大幅な開き が生じる現象が発生しました。 原因と対処につきまして、どなたかお分りになりましたら ご教示願います。 tableは60ほどのフィールドがありまして、その中で 32(デフォルトの最大)個のフィールドにインデックスを 設定しております。以下に示しておりますF1、F2、F3が そのインデックスとして指定しているフィールドで、 index index1(F1,F3) index index2(F2,F3) のように設定しております。なお、F1,F2はTINYINTです。 このtableは最後に示しております通り、24Gbyteほどありまして、 MyISAMによって構成しております。 以下はCSEというツールによるSQLの実行結果です。 まず、F1、F3を条件指定してselectを実行しますと、 *** select ref1,ref2,ref3 from table where F1>=1 and F3=15 limit 10 SQLを実行中です... SQL応答時間 : 0.060000秒 取得データ出力時間 : 0.000000秒 *** 瞬時に応答が得られます。 同様にして、F1,F2,F3全てを指定しましても応答は瞬時です。 *** select ref1,ref2,ref3 from table where F1>=1 and F2>=1 and F3=15 limit 10 SQLを実行中です... SQL応答時間 : 0.000000秒 取得データ出力時間 : 0.000000秒 *** ところが、whereで指定する値が、F1、F2のどちらかを"3"以上 で検索しますと極端に遅くなります。 *** select ref1,ref2,ref3 from table where F1>=3 and F2>=1 and F3=15 limit 10 SQLを実行中です... SQL応答時間 : 218.213000秒 取得データ出力時間 : 0.000000秒 *** 以下は条件を変えて実行したものです。 *** select ref1,ref2,ref3 from table where F1>=3 and F3=15 limit 10 SQLを実行中です... SQL応答時間 : 0.000000秒 取得データ出力時間 : 0.000000秒 select ref1,ref2,ref3 from table where F1>=5 and F3=15 limit 10 SQLを実行中です... SQL応答時間 : 0.000000秒 取得データ出力時間 : 0.000000秒 select ref1,ref2,ref3 from table where F1>=1 and F2>=1 and F3=15 limit 10 SQLを実行中です... SQL応答時間 : 0.000000秒 取得データ出力時間 : 0.000000秒 select ref1,ref2,ref3 from table where F1>=2 and F2>=1 and F3=15 limit 10 SQLを実行中です... SQL応答時間 : 0.010000秒 取得データ出力時間 : 0.000000秒 10行が選択されました。 *** このように、 ・indexとなっているフィールドをwhereで複数指定している かつ ・少なくとも1つのフィールドを"3"以上として指定する の条件の時に処理が遅くなります。 なお、explainの結果は指定するフィールドが同じであれば、 同じ結果となり、typeはrangeとなり、rowsは同じ値です。 実行環境は、 MySql:4.0.15 WIN2K tableの規模は records:49575782 record length:496 data file:24627234448 index file:4586839040 です。 以上よろしくお願いいたします。
-> 8304 2003-10-21 00:15 ["Takashi Matsui" <k_] where 節で指定する値で実行が遅くなる 8305 2003-10-21 09:03 ┗[とみたまさひろ <tomm]