SQLの詳細なMySQLの最適化(C)
1.索引チューニング
選択クエリの条件がベストマッチた場合、完全な値がそうであるように、最高の左プリフィックスの原則を順守しようとするインデックス、一度。
最初の前提は、インデックス、インデックスを最適化するために構築され、第2の指標は、失敗を回避することです
障害シーンインデックス
- インデックス複数の列場合は、最も左のプレフィックスは、法律を遵守しています。これは、インデックス初めの最前線に左端からクエリを参照し、列インデックスをスキップしません
- (変換タイプ)(自動または手動計算し、機能)何列のインデックスをしない、インデックスは、ステアリング全表スキャンの失敗につながります
- ストレージエンジンは、範囲の条件の右側の列にインデックスを使用することはできません
- MySQLは(!=または<>)、使用中の等しくないインデックスがフルテーブルスキャンにつながるときに使用することはできません
- 、nullのインデックスを使用することはできませんnullではありません
- ワイルドカードは開始したい(「%abcのを...」)MySQLの故障インデックステーブルスキャン操作が完成となり
- 以下または接続するためにそれを使用する場合、インデックスが失敗します
小概要:
仮定するインデックス(A、B、C)
どこ声明 | インデックスが使用されているかどうか |
---|---|
ここ= 3 | Yは、使用します |
ここ= 3、B = 5 | Y、A、Bを使用します |
ここ= 3、B = 5およびc = 4 | Y、A、B、Cを使用します |
ここで、b = 3、B = 3、C = 4、またはここで、c = 4 | N |
ここ= 3、C = 5 | 、断続的のbは、ではなく、Cを使用するには |
ここ= 3及びB> 4およびc = 5 | AおよびBを用いて、cがオフB、以下の範囲で使用することができません |
ここで、 'KKの%' のよう= 3、b及びc = 4 | Y、A、B、Cを使用します |
ここで、 '%のK-K' のよう= 3、b及びc = 4 | Y、のみ使用します |
ここで、およびc = 4 '%のKKの%' のよう= 3及びB | Y、のみ使用します |
ここなど= 3及びB 'K%KK%' およびc = 4 | Y、A、B、Cを使用します |
2.分析レポートは:プロフィールを見ます
概要:現在のセッションの文の実行中にリソース消費を分析するために使用することができます提供されmysqlの。SQLチューニング測定するために使用することができます
:公式サイトショープロフィール
デフォルトでは、パラメータはデフォルトでは15回開いた後、最近の実行結果を保存し、オフになっています
1. サポートするかどうか、現在のバージョンを見ては、MySQLをサポートしています
Show variables like 'profiling';
2. opening関数に、デフォルトではオフになって、使用前に開く必要があります
set profiling=on;
3. 実行SQL
select * from emp group by id%10 limit 150000;
select * from emp group by id%20 order by 5
4. 結果はプロフィールを示すチェック。
5. 診断SQL、ショープロファイルCPU、クエリSQLの問題の桁数の前のステップのIOブロックと
状態 | 提案 |
---|---|
システムロック | 大きな時間のかかる再フォーカスには、通常の状況下では大丈夫です場合:InnoDBのか、MySQLはカーネルレベルのロックが原因推奨通常ので、ロックの原因を確認するため、どれ |
データを送信します | クライアントにサーバからデータを送信、データ記憶層が受けることができるエンジンを返し、その後、クライアントに送信される、特に、多くの場合、目に見える大きなデータ注量とき:送信データ伝送ネットワークではなく、ハードディスクから読み出され、伝送インデックスまたは追加LIMITをスキャンする必要性、およびクライアントに送信されるデータの量を減らす:ネットへの書き込みは、勧告をネットワークにあります |
結果の並べ替え | 適切なインデックスを作成するには:それは、ソートインデックスの作成と同様の結果、が、通常のテーブルをソートするのではなく、メモリの推奨でテーブルをソートすることです |
テーブルロック | 表レベルのロック、何も言うこと、のいずれかのためのMyISAMエンジンのテーブルレベルのロック、またはありそうでない場合は、明示的にロックテーブル |
ソートインデックスを作成します | 適切なインデックスを作成します:ソート勧告で一時テーブルSELECT作るORDERを使用するために、現在の必要性 |
checking query cache for querychecking privileges on cachedsending cached result to clienstoring result in query cache | 和query cache相关的状态,已经多次强烈建议关闭 |
6. 日常开发需要注意的结论
- Creating tmp table 创建临时表
- Copying to tmp table on disk 把内存中临时表复制到磁盘,危险!!!
- locked 被锁住
示例:剖析 select * from emp group by id%20 order by 5
由剖析报告看出,其中 Copying to tmp table 步骤花费了大量的时间,所以这条SQL应该优化了。
注:该文的SQL只是为了便利的梳理知识点使用,不需要关心这条SQL为什么这样写,了解以上知识的使用方法就可以啦