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

mysql:12709

From: Tetsuro IKEDA <Tetsuro IKEDA <tetsuro@xxxxxxxxxx>>
Date: Thu, 02 Feb 2006 15:36:06 -0800
Subject: [mysql 12709] Re: MyISAMのHeapテーブルについて

柴垣さん、こんにちは。池田と申します。

例えば、こんな感じのテーブルに適当にデータを突っ込んで、
CREATE TABLE t1 (c1 INT NOT NULL, UNIQUE INDEX (c1)) TYPE=HEAP;

EXPLAINをすると以下のようになります。
mysql> EXPLAIN SELECT c1 FROM t1 ORDER BY c1\G
*************************** 1. row ***************************
        table: t1
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 5
        Extra: Using filesort
1 row in set (0.00 sec)

HEAPテーブルではB-Treeインデックスではなく、ハッシュインデックスが使用されています。
つまり、"Extra: Using filesort"の示すようにORDER BYではソート処理が発生します。

このソート処理による性能低下がどれくらいのものであるかは、ソート対象のレコード数、
即ち、そのSELECT文で返される結果の行数がどれくらいあるのかに依存すると思います。

HEAPテーブルの利用そのもので言えば、100MBを超えるサイズのHEAPテーブルの利用事例なども
あるようですし、数MByteということ自体は問題ないのではないでしょうか。

HEAPを使わない場合にはMyISAMを使うのではと思いますが、
やはり一度、実際に測定してみたほうがいいのではと思います。

あまりお役に立てずに済みません。

柴垣 wrote:
> 柴垣です。
> 
>  MyISAMのHeapテーブルを使用するつもりなのですが、マニュア
> ルに、
> 
> 「次のエントリを順番に検索できない(つまり、インデックスを
> 使って ORDER BY を実行できない)。 」
> 
> と記述してあります。
>  つまり、ある程度のサイズがあって、「order by 」句が含まれ
> るような用途には適していないのでしょうか。
>  また、スピード等の観点からいって、どの程度のサイズまでが
> 運用に適しているのでしょうか。
> 
>  今回の環境は、バージョン3.23.55nt WindowsXP です。システム
> 変数では、max-heap-table-size が、16777216 で、予定している
> Heap テーブルのサイズは、最大で、数Mbyteなのですが。
> 
> 
> _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
> 
>  柴垣 顕郎 akiro@xxxxxxxxxx
> 
> _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
> 
> 


-- 
Tetsuro Ikeda, Intern Development & Support
MySQL Inc, www.mysql.com
Office: +1-206-336-2030   Mobile: +1-206-661-4293
Are you MySQL certified?  www.mysql.com/certification

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

     12707 2006-02-03 02:31 [柴垣 <akiro@xxxxxxxx] MyISAMのHeapテーブルについて            
->   12709 2006-02-03 08:36 ┗[Tetsuro IKEDA <tetsu]                                       
     12726 2006-02-07 02:15  ┗[柴垣 <akiro@xxxxxxxx]