無料PHPプログラム

MySQL 5.1 リファレンスマニュアル :: 6 最適化 :: 6.2 SELECTステートメントおよびその他のクエリの最適化 :: 6.2.15 テーブルスキャンを避ける方法
« 6.2.14 LIMITの最適化

6.2.16 INSERTステートメントの速度 »
Section Navigation      [Toggle]
  • 6.2 SELECTステートメントおよびその他のクエリの最適化
  • 6.2.1 EXPLAINを使用して、クエリを最適化する
  • 6.2.2 クエリパフォーマンスの推定
  • 6.2.3 SELECTクエリの速度
  • 6.2.4 WHERE 節最適化
  • 6.2.5 Range 最適化
  • 6.2.6 インデックス結合最適化
  • 6.2.7 IS NULL最適化
  • 6.2.8 DISTINCT最適化
  • 6.2.9 LEFT JOINとRIGHT JOIN最適化
  • 6.2.10 入れ子結合最適化
  • 6.2.11 外側Join 単純化
  • 6.2.12 ORDER BY最適化
  • 6.2.13 GROUP BY最適化
  • 6.2.14 LIMITの最適化
  • 6.2.15 テーブルスキャンを避ける方法
  • 6.2.16 INSERTステートメントの速度
  • 6.2.17 UPDATEステートメントの速度
  • 6.2.18 DELETEステートメントの速度
  • 6.2.19 その他の最適化のヒント

6.2.15. テーブルスキャンを避ける方法

MySQLがクエリを解決するのにテーブルスキャンを使用すると、EXPLAINからの出力は、typeカラムのALLを表示します。これはたいてい以下の条件下で生じます。

  • テーブルが小さすぎて、時間のかかるキールックアップよりもテーブルスキャンの実行のほうが遅くなります。このことは、10行以下の行や短い行をもつテーブルにはよく起こることです。

  • インデックスカラムに対して、ONまたはWHERE節内に使用できる制限はありません。

  • インデックスカラムを定数値と比較し、MySQLは(インデックスツリーに基づいて)その定数がテーブルの大きすぎる部分をカバーしているか、またテーブルスキャンが高速に行われるかを計算します。項6.2.4. 「WHERE 節最適化」を参照してください。

  • 他のカラムをとおして、低濃度(多数の行がキー値に当てはまる)でキーを使用します。この場合、MySQLは、 キーを使用して多数のキールックアップが実行され、またテーブルスキャンもより速く行われるであろうと認識します。

小さいテーブルに対しては、テーブルスキャンはたいてい適切であり、実行の際の影響は無視されます。大きいテーブルに対しては、オプティマイザが間違ったテーブルスキャンを選択しないように、以下の方法を試してください。

  • スキャンされたテーブルのキー配置を更新するには、ANALYZE TABLE tbl_name を使用してください。項12.5.2.1. 「ANALYZE TABLE 構文」を参照してください。

  • MySQLに、テーブルスキャンは既存インデックスを使用するのに比べて大変時間がかかることを示すには、FORCE INDEXをスキャンされたテーブルに使用してください。

    SELECT * FROM t1, t2 FORCE INDEX (index_for_column)
      WHERE t1.col_name=t2.col_name;
    

    項12.2.7. 「SELECT 構文」を参照してください。

  • オプティマイザに1,000キーシーク以上のキースキャンがないことを認識させるには、--max-seeks-for-key=1000オプションで mysqldを起動させるか、もしくはSET max_seeks_for_key=1000を使用してください。項4.2.3. 「システム変数」を参照してください。

Copyright c 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates

無料CGI PHPスクリプト | 新着情報スクリプト | 営業日カレンダー | PHPマニュアル | MySQLマニュアル | PEARマニュアル

Copyright (c) 2010 jmcodex.com All rights reserved.