MySQLはコストベースのオプティマイザを使用して,クエリーを実行する最適な方法を判別しています。多くの場合,MySQLは実行可能な最適なクエリー計画を計算できますが,データに関する情報を十分に取得できず,データについて「学習による」推測を行う必要がある場合があります。
MySQLで”適切”に処理されなかった場合に,MySQLに指示を送るために使用できるツールを次に示します。
解释
ステ,トメントを使用して,MySQLがクエリ,を処理する方法に関する情報を取得します。これを使用するには,キ,ワ,ド解释
を选择
ステ,トメントの前に追加します。mysql>解释SELECT * FROM t1, t2 WHERE t1。I = t2.i;
解释
にいては,セクション13.8.2 " explain構文"で詳しく説明しています。分析表
を使用して,スキャンされるテ,ブルのキ,分布を更新します。セクション13.7.2.1 " analyze table構文"を参照してください。tbl_name
スキャンされるテ,ブルに
力指数
を使用して,テーブルスキャンは該当するインデックスを使用した場合と比較して著しく負荷が高いことをMySQLに通知します。SELECT * FROM t1, t2 FORCE INDEX (index_for_column) WHERE t1.col_name=t2.col_name;
使用索引
および忽略指数
も役に立ことがあります。セクション13.2.9.3“aapl . aapl .ンデックスヒントの構文”を参照してください。グロ,バルおよびテ,ブルレベルの
STRAIGHT_JOIN
。セクション13.2.9 " select構文"を参照してください。グロ,バルなシステム変数またはスレッド固有のシステム変数をチュ,ニングできます。たとえば,キースキャンでキー検索が1000回を超えて行われることはないと想定するようにオプティマイザに通知するには,
——max-seeks-for-key = 1000
オプションを指定してmysqldを起動するか,设置max_seeks_for_key = 1000
を使用します。セクション5.1.4 "サ,バ,システム変数"を参照してください。