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]