MySQLの最適化
まず、ストレージエンジン
1.すべてのエンジンをチェック
SHOW ENGINES;
2.デフォルトのストレージエンジンを見ます
show VARIABLES LIKE '%STORAGE_engine%';
3.MyISAMとInnoDBの
比較項目 | MyISAMテーブル | InnoDBの |
---|---|---|
プライマリ外部キー | サポートしていません。 | サポート |
業務 | サポートしていません。 | サポート |
表の行ロック | テーブルロック、記録動作は操作の高い並行性には適していないテーブル全体をロックする場合であっても | 行ロック、ロック操作のみ行、高度に並行動作のためのない他のラインへの影響 |
キャッシュ | キャッシュ・インデックスではなく、実際のデータキャッシュのみ | キャッシュインデックスも、真のデータ・キャッシュだけでなく、高いメモリ要件およびメモリ・サイズは、その性能に決定的な影響を与えます |
表スペース | 小さな | すばらしいです |
フォーカス | 演奏 | 業務 |
デフォルトのインストール | はい | はい |
二、SQL実行負荷順序
From left_table
on join_condition
<join_type> join right_table
where where_condition
group by group_condition
having having_condition
select
distinct select_list
order by orderBy_condtion
limit limit_num
第三に、インデックス
1.定義
MySQLのインデックスは、効率的にデータのデータ構造を得るのを助けることです。 - >自然:データ構造。
その目的は、クエリの効率を改善するために、辞書に類似し、それは簡単に理解することができますされて迅速なデータ構造を見つけるソート。
データ自体に加えて、データベースは、特定の検索アルゴリズムを満たすために、データ構造を維持し、これらのデータは、これらのデータ構造に基づいて、高度な検索アルゴリズムを実現することができるように、このデータ構造がインデックス化され、いくつかの方法でデータ構造を指します。
一般的に言えば、インデックスが指定されていない場合、(必ずしも複数の探索木ではなくバイナリ)B木組織のインデックス構造であること。インデックス、複合インデックス、接頭辞インデックスを覆う凝集インデックス、二次インデックスは、デフォルトでは、一意のインデックスB +ツリーインデックス、集合的にインデックスを使用することです。もちろん、このタイプのB +ツリーインデックス、ならびに他のハッシュ・インデックスに加えて
インデックスは、検索やソートに影響を与えます
また、偉大な一般的なインデックスは、すべてのメモリに格納することができないので、インデックスは、インデックスファイルに傾向があるが、ディスク上に格納されています。
2.特長
利点:データ検索効率を向上させ、IOデータベースのコストを削減します。
CPU使用率を減少させる、データのソートのコストを低減すること、インデックスによってデータを並べ替えます。
短所:実際には、インデックスはまた、固体のテーブルを記録するために主キーとインデックスフィールド、との点を保持するテーブルであるので、インデックスはまた、スペースを占有。
それは、テーブルの更新速度が低下する一方、それは非常に、クエリの速度を上げるが。データを保存するためのテーブルを更新するだけでなく、インデックスファイルについての保存だけでなくので、フィールド欄は、更新によってもたらされたキーの変更のインデックス情報ために調整されます追加するたびに更新されます。
インデックスは、データベーステーブルの数が多い場合は、あなたが最良の指標の確立を研究するために時間がかかる、またはクエリを最適化する必要があり、要因の効率を向上させます。
3.カテゴリー
単一値のインデックス
インデックスは、単一の列が含まれ、テーブルには、複数の単一値のインデックスを持つことができます。
インデックスのみ
索引列の値は一意であるが、自由な値を許可する必要があります
コンポジットインデックス
インデックスは、複数の列で構成されてい
4.基本的な構文
作成:UNIQUEは一意のインデックスで、ColumnNameには、複合インデックスの多くのがあり、単一の指標値であります
CREATE [UNIQUE] INDEX indexname on tablename(columnname1, columnname2...)
or
ALERT tablename add [UNIQUE] INDEX [indexname] on (columnname1, columnname2...)
削除:
DROP INDEX [indexname] on tablename
ビュー
SHOW INDEX FROM tablename
インデックス作成のためのケース
- 主キーは自動的に一意のインデックスを作成します
- 頻繁にクエリフィールドとしてインデックスを作成する必要があります
- クエリーテーブルやその他の関連分野、外部キー関係インデックス
- ソートフィールドは、インデックスを介してアクセスする場合のソートフィールドのクエリは、大幅に並べ替えの速度を向上します
- 速度選択/コンビネーションインデックス(複合インデックスを作成するための高い同時実行)
- 統計クエリまたはフィールドのグループ
6.状況は、インデックスを作成するには適していません
頻繁に更新されるフィールド
条件は、フィールド内のより少ない場所
少なすぎるとテーブルのレコード
平均データ複製、したがってテーブルフィールド、及び分布は、最も頻度の高いクエリにインデックスを付けることと、最も頻繁にデータを並べ替える必要があります
=異なる数の選択指数/総数