MySQL 8.0 リファレンスマニュアル


B.3.5 オプティマイザ関連の問題

MySQL はコストベースのオプティマイザを使用して、クエリーを実行する最適な方法を判別しています。 多くの場合、MySQL は実行可能な最適なクエリー計画を計算できますが、データに関する情報を十分に取得できず、データについて学習による推測を行う必要がある場合があります。

MySQL で「適切」に処理されなかった場合に、MySQL に指示を送るために使用できるツールを次に示します。

  • EXPLAIN ステートメントを使用して、MySQL がクエリーを処理する方法に関する情報を取得します。 これを使用するには、キーワード EXPLAINSELECT ステートメントの前に追加します。

    mysql> EXPLAIN SELECT * FROM t1, t2 WHERE t1.i = t2.i;

    EXPLAIN については、セクション13.8.2「EXPLAIN ステートメント」で詳しく説明しています。

  • ANALYZE TABLE tbl_name を使用して、スキャンされるテーブルのキー分布を更新します。 セクション13.7.3.1「ANALYZE TABLE ステートメント」を参照してください。

  • スキャンされるテーブルに FORCE INDEX を使用して、テーブルスキャンは該当するインデックスを使用した場合と比較して著しく負荷が高いことを MySQL に通知します。

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

    USE INDEX および IGNORE INDEX も役に立つことがあります。 セクション8.9.4「インデックスヒント」を参照してください。

  • グローバルおよびテーブルレベルの STRAIGHT_JOINセクション13.2.10「SELECT ステートメント」を参照してください。

  • グローバルなシステム変数またはスレッド固有のシステム変数をチューニングできます。 たとえば、キースキャンでキー検索が 1,000 回を超えて行われることはないと想定するようにオプティマイザに通知するには、--max-seeks-for-key=1000 オプションを指定して mysqld を起動するか、SET max_seeks_for_key=1000 を使用します。 セクション5.1.8「サーバーシステム変数」を参照してください。


関連キーワード:  テーブル, オプティマイザ, リファレンス, 方法, 一般, ステートメント, エラー, マニュアル, B, 関連