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

mysql:957

From: 民斗 <民斗 <tommy@xxxxxxxxxx>>
Date: Thu, 10 Jun 1999 10:47:32 +0900
Subject: [mysql 00957] Re: [Q] 分割列による SELECT のスピード比較

民斗です。

[Subject: [mysql 00955] [Q] 分割列によるSELECT のスピード比較]
[Date: Thu, 10 Jun 1999 00:26:21 +0900  From:Takashi YAMAMOTO]

> このテーブルに
> 
> 【SELECT-1】
>  select * from pat1 where key01 like 'XXX%' or key01 like 'XXX%' or key03 like 'XXX%'

2番目の like は key02 ですよね。

> というのを投げるのと
> 
> 【SELECT-2】
>  select * from pat2 where keys like '%XXX%';
> 
> とでは、どちらが早いでしょうか?

> なんとなくですが、'%XXX%' を使うSELECT-2より、indexを使ったSELECT-1の方が
> 早いと予想していたのですが、

私もそう思いました。

> なんと
> 
> SELECT-1 : 約30sec
> SELECT-2 : 約5sec
> 
>  (実際は、3個ではなく12個のキーワード、かつ20万件で mysql3.22.22 の場合の速度です)
> 
> と、SELECT-2 の方が早かったのです。

おや…。

昔、"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 のトータル時間の方が速いという…。

でも、聞いたのが結構前なので 3.22.x にはあてはまらないかも…。


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

--
民斗 <tommy@xxxxxxxxxx>

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

       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]