TOPサーバ構築・運用> LOAD文試験の内容と結果
徹底比較!! MySQLエンジン
徹底比較!! MySQLエンジン

第6回:ストレージエンジンの処理性能比較
著者:NTTデータ  藤塚 勤也   2006/10/10
前のページ  1  2   3  次のページ
LOAD文試験の内容と結果

   使用したLOAD文は次の通りです。
試験用LOAD文

(画像をクリックすると別ウィンドウに拡大図を表示します)

   「TESTDATA.csv」ファイルには100万件分のデータが含まれており、ファイルサイズは103,796,650Byteです。

   それぞれのストレージエンジンごとの処理時間は図2の通りになりました。

LOAD文試験の結果
図2:LOAD文試験の結果

   ディスク上にデータを書き出さないMemoryエンジンの速度が速いことは当然の結果と思います。

   また表2に、MyISAM/Archive/CSVエンジンの100万件のレコードを格納したテーブルファイルのサイズを示します。Archiveエンジンのテーブルファイルのサイズは他の2つに比べて小さいことがわかります。

ストレージエンジン テーブルファイルサイズ(Byte)
MyISAM 148,000,000
Archive 80,265,258
CSV 116,796,650

表2:テーブルファイルのサイズ


SELECT文試験の内容と結果

   ストレージエンジン別の「TEST00」テーブルに、100万件のレコードを格納した状態で次の3種類のSELECT文について試験を実施しました。

試験用SELECT文1
SELECT COUNT(*) FROM TEST00

試験用SELECT文2
SELECT SUM(ADDR_CO_ID) FROM TEST00

試験用SELECT文3
SELECT ADDR_CO_ID FROM TEST00 WHERE ADDR_ID = ?

   SELECT文1は「TEST00」テーブルのレコード数を抽出します。SELECT文2は、ADDR_CO_IDカラムの値について全レコード分の合計値を抽出します。基本的には、SELECT文1、2ともに100万件レコードを全件探索しなければ答えを得ることはできません。

   SELECT文3は、指定したADDR_IDカラムの値を持つレコードを検索し、ADDR_CO_IDカラム値を抽出します。指定するADDR_IDカラムの値(SELECT文中の"?"部分)には、SELECT文を発行するごとに異なった値を設定します。「TEST00」テーブルのADDR_IDカラムはプライマリーキーであり、インデックスをサポートしているストレージエンジンでは、ユニークインデックスが存在しています。

   試験方法は、性能測定用アプリケーションから上記のSELECT文を連続して100回発行し、100回分の処理に要した時間を測定しました。

   結果は図3の通りです。SELECT文別の測定結果の値には大きな差がありました。そこで、それらの結果を1つのグラフ上に載せるため、縦軸のメモリは対数になっていますので注意してください。

SELECT文試験の結果
図3:SELECT文試験の結果

   この結果から次のことがわかります。

  • インデックスが有効に働いたことにより、MyISAM/InnoDB/MemoryエンジンはSELECT文3の処理時間が極めて短い
  • ArchiveとCSVエンジンは、どのような検索も全件探索になるため、SELECT文の違いによって処理時間に大きな差はない。ただし、ArchiveテーブルはCSVテーブルよりテーブルファイルのサイズが小さいため、若干処理時間が短い
  • MyISAMとMemoryエンジンのSELECT文1の処理時間が短いのは、全件探索を行わず、統計情報から件数を抽出していると考えられる
  • 例えMemoryエンジンでも、全件探索が必要なSELECT文2では、それなりの処理時間を必要とする

表3:SELECT文と各ストレージエンジン

前のページ  1  2   3  次のページ


株式会社NTTデータ  藤塚 勤也
著者プロフィール
株式会社NTTデータ   藤塚 勤也
基盤システム事業本部 オープンソース開発センタ シニアスペシャリスト。
日本タンデムコンピューターズ(現日本HP)を経て、2003年よりNTTデータにてOSS分野に参画。日頃はオリジナルOSSの開発や、OSSを用いたシステム構築への技術支援に従事。「RDBMS解剖学」(翔泳社)を共著。

INDEX
第6回:ストレージエンジンの処理性能比較
  はじめに
LOAD文試験の内容と結果
  INSERT文試験の内容と結果