mysql:8921
From: ML account <ML account <ml@xxxxxxxxxx>>
Date: Sun, 07 Mar 2004 22:06:42 +0900
Subject: [mysql 08921] Re: DISTINCT オプションの動作について
こんにちは。 UNO Shintaro <uno@xxxxxxxxxx>さんの <200403070956.i279uGrK013930@xxxxxxxxxx> "[mysql 08919] Re: DISTINCTオプションの動作について" > なるほど、自己ジョインに限らず普通のジョインでも「適切なインデックスが > なければ」直積のロー全件アクセスが起きてしまいますね。 > 使われるクエリーパターンに応じて適切なインデックスをつけるのは当たり前 > だと思っていたのですが、それでは答えとしては足りないということですね。 > すみませんでした。 インデックスを張る事により検索(SELECT)クエリの処理時間が短くなる可能性 はあります。別テーブルのINNER JOINの場合、インデックスの有無で処理時間は 天と地ですよね。 インデックスを付けて処理時間の再計測をしてみました。テーブル定義は、 create table tmp001 (NO int,MESSAGE varchar(50),DATE datetime, index IDX_NO_DATE (NO,DATE)); です。 recs | no index | w/index -----+----------+--------- 100 | 0.02 | 0.02 1000 | 1.14 | 0.69 2000 | 4.59 | 2.73 3000 | 10.31 | 6.24 4000 | 18.34 | 11.09 5000 | 28.78 | 17.58 この表で見られる様に、処理時間が6割方と改善はされています。ですが、や はりレコード数の二乗に比例の傾向は見て取れます。 インデックスはもちろん万能ではありませんし、好ましくない副作用が無い訳 ではありませんし、特に今回の件に関しては「インデックスを張れば」に対して はボクの意見は否定的です。挿入/更新/削除クエリの処理時間の増大は、(レコー ド数が少ない場合やインデックスの実装によっては)軽視して構わない場合もあ りますし、一概には言えません。Nの二乗な性質の方が大きな問題です。 インデックスの副作用と言えば、錠さんの[mysql 08917]の場合、インデック スの再構築が非常な重荷になっている事が8時間ものdeleteクエリの処理時間の 一因なのではと考えています。 > それにしても、松枝さんが書いて下さっている結合文字列を使う方法はうまい > ですね。桁数をきちんと揃えるとかの考慮は要るものの、その条件を満たせば > 有効な方法だと思います。 大昔に先輩から教えて貰いました。利用はかなり限定的ですが。 松枝知直 <tomom@xxxxxxxxxx> http://www.argus.ne.jp/~tomom/
8911 2004-03-07 02:49 [<konet218@xxxxxxxxxx] DISTINCT オプションの動作について 8912 2004-03-07 03:52 ┣[ML account <ml@xxxxx] 8918 2004-03-07 16:51 ┃┗[KAWAJI Shinya <kawaj] 8920 2004-03-07 22:06 ┃ ┗[ML account <ml@xxxxx] 8913 2004-03-07 04:48 ┗[UNO Shintaro <uno@xx] 8914 2004-03-07 06:20 ┣[Sumito_Oda <oda@xxxx] 予約語 (Re: DISTINCT オプションの動作について) 8915 2004-03-07 06:23 ┗[<konet218@xxxxxxxxxx] 8916 2004-03-07 13:36 ┗[ML account <ml@xxxxx] 8919 2004-03-07 18:56 ┗[UNO Shintaro <uno@xx] -> 8921 2004-03-07 22:06 ┗[ML account <ml@xxxxx] 8923 2004-03-07 22:29 ┗[UNO Shintaro <uno@xx]