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

mysql:958

From: Takashi YAMAMOTO <Takashi YAMAMOTO <yamamoto@xxxxxxxxxx>>
Date: Thu, 10 Jun 1999 11:03:25 +0900
Subject: [mysql 00958] Re: [Q] 分割列による SELECT のスピード比較


山本です。


民斗>> 【SELECT-1】
民斗>>  select * from pat1 where key01 like 'XXX%' or key01 like 'XXX%' or key03 like 'XXX%'
民斗>
民斗>2番目の like は key02 ですよね。

おっと、失礼しました。


民斗>昔、"or" 演算子は遅いと聞いたことがあります。

言われてみれば、そういう話を聞いたことが私もあります。


民斗>つまり、
民斗>	select * from pat1 where key01 like 'XXX%' or key02 like 'XXX%' or key03 like 
'XXX%'
民斗>とするより
民斗>	select * from pat1 where key01 like 'XXX%';
民斗>	select * from pat1 where key02 like 'XXX%';
民斗>	select * from pat1 where key03 like 'XXX%';
民斗>と3回の select のトータル時間の方が速いという…。

で、やってみると

■ORで連結
  35sec
■単独で3回SELECT
  0.5sec x 3

という結果でした。

単独で3回SELECTの場合、3つの結果をマージしていく処理が必要ではありますが、
こっちのが結局早いのかもしれませんね。


民斗>あと、インデックステーブルがあまりにも大きいと、ディスク I/O のオーバー
民斗>ヘッドのせいで、インデックスを使わない方が速いこともあるのかもしれません。

試したのは20万件で、ISMファイルは34430976バイトありました。

また、

■OR連結の場合のEXPLAINの結果
+---------+------+-------------------+------+---------+------+--------+------------+
| table   | type | possible_keys     | key  | key_len | ref  | rows   | Extra      |
+---------+------+-------------------+------+---------+------+--------+------------+
| keytbls | ALL  | key01,key02,key03 | NULL |    NULL | NULL | 195744 | where used |
+---------+------+-------------------+------+---------+------+--------+------------+

■単独で3回のEXPLAINの結果
+---------+-------+---------------+-------+---------+------+------+-------+
| table   | type  | possible_keys | key   | key_len | ref  | rows | Extra |
+---------+-------+---------------+-------+---------+------+------+-------+
| keytbls | range | key01         | key01 |    NULL | NULL |    1 |       |
+---------+-------+---------------+-------+---------+------+------+-------+

でした。


やっぱり、OR は 3.22 でも遅いのかしら、、、、


+======< Internet-Mail: yamamoto@xxxxxxxxxx >=====+
      Takashi YAMAMOTO      |       山本  高志
      Recruit Co.,Ltd.      |    (株)リクルート
   Datacast Business Div.   |  プロジェクト推進グループ
+=============< URL: http://www.isize.com/ >=============+

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

       955 1999-06-10 00:26 [Takashi YAMAMOTO <ya] [Q] 分割列による SELECT のスピード比較  
       956 1999-06-10 09:25 ┣[KATSURO Tomokazu <to]                                       
       957 1999-06-10 10:47 ┗[民斗 <tommy@xxxxxxxx]                                       
->     958 1999-06-10 11:03  ┗[Takashi YAMAMOTO <ya]                                     
       959 1999-06-10 11:12   ┣[<endo@xxxxxxxxxx>   ]                                   
       960 1999-06-10 13:01   ┃┗[民斗 <tommy@xxxxxxxx]                                 
       963 1999-06-10 13:16   ┃ ┗[<endo@xxxxxxxxxx>   ]                               
       961 1999-06-10 13:17   ┣[民斗 <tommy@xxxxxxxx]                                   
       962 1999-06-10 13:26   ┗["MINOHATA Norio" <mi]