ホームページ >データベース >mysql チュートリアル >mysqlデータベースを最適化するにはどうすればよいですか?

mysqlデータベースを最適化するにはどうすればよいですか?

(*-*)浩
(*-*)浩オリジナル
2019-05-09 11:13:2615973ブラウズ

Mysql データベースを最適化する方法: 1. インデックスを作成する; 2. 複合インデックスを使用する; 3. NULL 値を持つカラムをインデックスに含めない; 4. 短いインデックスを使用する; 5. インデックスを含めないようにする複数列のソート; 6. 同様の操作の使用を避ける; 7. 列などに対して操作を実行しない。

mysqlデータベースを最適化するにはどうすればよいですか?

この記事では、インデックス、複合インデックス、NULL 値を持つ列を含まないインデックスの作成、短いインデックスの使用、ソートの 8 つの方法を通じて MySQL データベースを最適化します。インデックス ステートメント操作と同様の質問では、列に対して操作を実行せず、NOT IN および <> 操作を使用せず、参考資料を提供するためにこれを行う理由を紹介します。

推奨コース: MySQL チュートリアル

1. インデックスを作成する

クエリが大半を占めるアプリケーションでは、インデックスが特に重要です。多くの場合、パフォーマンスの問題は、単にインデックスの追加を忘れたり、より効果的なインデックスを追加しなかったりすることが原因で発生します。インデックスがない場合、特定のデータでも検索するためにテーブル全体のスキャンが実行されます。テーブル内のデータ量が多く、条件を満たす結果がほとんどない場合、インデックスを追加しないと致命的なパフォーマンスの低下が発生します。 . .ただし、あらゆる状況でインデックスを作成する必要はありません。たとえば、性別には 2 つの値しかない場合があります。インデックスを作成してもメリットがないだけでなく、更新速度にも影響します。これは過剰インデックスと呼ばれます。

2. 複合インデックス

たとえば、次のようなステートメントがあります: select * from users where area='beijing' and age=22;

エリアと年齢にそれぞれ単一のインデックスを作成すると、mysql クエリは一度に 1 つのインデックスしか使用できません。これにより、インデックスがない場合に比べてテーブル全体のスキャンの効率が向上しますが、領域と年齢に単一のインデックスを作成すると、エリアと年齢に応じて、列に複合インデックスを作成すると効率が高くなります。 (面積、年齢、給与) の複合インデックスを作成すると、実際には、(面積、年齢、給与)、(面積、年齢)、(面積) の 3 つのインデックスを作成することと同じになり、これを左の最良の接頭辞特性と呼びます。したがって、複合インデックスを作成するときは、制約として最もよく使用される列を左側に降順で配置する必要があります。

3. インデックスには NULL 値を含む列を含めないでください。

列に NULL 値が含まれている限り、インデックスには含まれません。複合インデックスに列があり、その列に NULL 値が含まれている場合、この列はこの複合インデックスに対して無効です。したがって、データベースを設計するときは、フィールドのデフォルト値を NULL にしないでください。

4. 短いインデックス

を使用して文字列のインデックスを作成します。可能であれば、プレフィックスの長さを指定する必要があります。たとえば、CHAR(255) 列がある場合、ほとんどの値が最初の 10 文字または 20 文字内で一意である場合は、列全体にインデックスを付けないでください。短いインデックスはクエリ速度を向上させるだけでなく、ディスク領域と I/O 操作を節約します。

5. インデックスのソートの問題

mysql クエリはインデックスを 1 つだけ使用するため、インデックスが where 句で使用されている場合、順序付けされた列はインデックスになります。使用されません。したがって、データベースのデフォルトの並べ替えで要件を満たすことができる場合は、並べ替え操作を使用しないでください。複数の列の並べ替えを含めないようにしてください。必要に応じて、これらの列に対して複合インデックスを作成することをお勧めします。

6. like 文の操作

like 操作の使用は一般的に推奨されていませんが、どうしても使用しなければならない場合には、どのように使用するかも問題になります。 「�a%」のようにインデックスは使用されませんが、「aaa%」のようにインデックスは使用されます。

7. 列に対して操作を実行しないでください

各行に YEAR(adddate)<2007;

が含まれるユーザーから * を選択してくださいこれによりインデックスが失敗し、テーブル全体のスキャンが実行されるため、

select * from users where adddate<'2007-01-01';

に変更できます。 8. NOT IN および <> 操作は使用しないでください

NOT IN および <> 操作はインデックスを使用せず、テーブル全体のスキャンを実行します。 NOT IN は NOT EXISTS に置き換えることができ、id3 は id>3 または id

以上がmysqlデータベースを最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。