コード行を変更し、MySQLクエリの効率を80%向上させ、上司から500,000の報酬をもらいました

 ⭐序文

        MySQLデータベースの最適化は、データベース管理者にとって必要なスキルです。MySQLデータベースのパフォーマンスを向上させる目的を達成するために、さまざまな最適化方法が使用されます。

        MySQLデータベースユーザーとデータの量が非常に少ない場合、MySQLデータベースのパフォーマンスを判断することは困難です。ユーザー数とデータ量が増加した場合にのみ、MySQLのパフォーマンスをどのように反映できますか。クエリはデータベースの最も頻繁な操作であり、クエリ速度を向上させると、MySQLデータベースのパフォーマンスを効果的に向上させることができます。


クエリを最適化する

⭐SHOWSTATUSステートメントでMySQLデータベースのパフォーマンスを照会する⭐

⭐クエリステートメントを分析する⭐

⭐クエリ速度に対するインデックス作成の影響⭐

⭐LIKE最適化インデックスクエリ⭐

⭐複数列のインデックスを使用する⭐

⭐キーワードを使用するまたは⭐


⭐SHOWSTATUSステートメントでMySQLデータベースのパフォーマンスを照会する⭐

SHOW STATUSステートメントを使用して、 MySQLデータベースのパフォーマンスを照会できます。

構文形式:

SHOW STATUS LIKE 'VALUE'

VALUEパラメータは次のとおりです

  1. 接続:MySQLサーバーに接続する回数。
  2. 稼働時間:MySQLサーバーのオンライン時間。
  3. Slow_queries:遅いクエリの数。
  4. Com_select:クエリ操作の数。
  5. Com_insert:挿入操作の数。
  6. Com_delete:削除操作の数。

これらのパラメータを通じて、MySQLデータベースのパフォーマンスを分析できます。次に、分析結果に従って、対応するパフォーマンスの最適化が実行されます。



⭐クエリステートメントを分析する⭐

クエリステートメントは、 EXPLAINステートメントとDESCRIBEステートメントを使用して分析できます

構文形式:

#EXPLAIN 语法格式
EXPLAIN  SELECT 语句;

#DESCRIBE 语法格式
DESCRIBE SELECT 语句;

 次に、それぞれEXPLAINDESCRIBEを紹介します。

EXPLAINステートメントを使用してクエリステートメントを分析します

 各フィールドの意味:

id:クエリ全体での選択の位置を示します。

table:照会するテーブルの名前を保持します。

type:接続タイプ。この列には、constからAllまでの多くの値が格納されます。

possible_keys:検索速度を向上させるためにMySQLで使用できるインデックスを示します。

key:実際に使用されているキーを示します。

rows:対応するテーブルをチェックインするためにMySQLがクエリ結果を返す必要がある行数を示します。行の総数を取得するには、MySQLはクエリ全体をスキャンし、各テーブルの行値を掛ける必要があります。

追加:MySQLがクエリを処理する方法を設計するための追加情報が含まれています。


DESCRIBEステートメントを使用してクエリステートメントを分析します

 DESCRIBEステートメントの使用法はEXPLAIN構文の使用法と同じであり、2つの分析結果は一般的に同じです。


⭐クエリ速度に対するインデックス作成の影響⭐

クエリのプロセスでインデックスを使用します。これにより、データベースクエリの効率が向上し、クエリの数を減らすことができます。次に、例を使用して、インデックスを使用する場合と使用しない場合のクエリ速度の違いを比較します。


Studentテーブルにクエリを実行して、インデックスがある場合とない場合を分析します。

 


インデックスを使用しないクエリ

explain select * from student where stuname = 'zhangsan';

 分析:インデックスを使用せずに、元のテーブルの3つのデータすべてがクエリされていることがわかりました。現時点では、3つのデータだけの影響は何であるかと言う人もいます。もちろん、データ量が少ない場合は、クエリの効率に大きな違いはありません。データベースに数千万のデータなどの膨大な量のデータがある場合、クエリを実行すると数千万のデータが取得され、ユーザーが数十をトラバースするのに多くの時間がかかります。データリソースの一部をクエリするための何百万ものデータ。


インデックスを使用したクエリ

まず、stunameフィールドにインデックスを追加します

CREATE INDEX index_stuname ON student(stuname);

 インデックスを追加した後、クエリを実行しています

explain select * from student where stuname = 'zhangsan';

 分析:上記の結果からわかるように、インデックスが作成されるため、アクセスされる行数が3から1に減少します。したがって、クエリ操作でインデックスを使用すると、クエリの効率が最適化されるだけでなく、サーバーのオーバーヘッド。


⭐LIKE最適化インデックスクエリ⭐

最初の文字が「%」の場合、インデックスは使用されません。一致する文字列の「%」の位置が最初の位置でない場合、インデックスは通常どおり使用されます。

explain select * from student where stuname like 'zh%';

 


⭐複数列のインデックスを使用する⭐

複数列のインデックスは、テーブルの複数のフィールドにインデックスを作成します。インデックスは通常、これらのフィールドの1つがクエリ条件で使用されている場合にのみ使用されます。

複数列のインデックスを作成する

CREATE INDEX index_student ON student(stuname,stuage);

注:クエリ時にstuageフィールドを適用すると、インデックスは正常に使用できなくなり、最初のフィールドstunameを使用する必要がある場合にのみインデックスが有効になります。これは覚えておく必要があります!



⭐キーワードを使用するまたは⭐

       MySQLでは、クエリステートメントにキーワードorのみが含まれている場合、クエリする2つのフィールドの両方にインデックスを付ける必要があります。検索された条件の1つがインデックスでない場合、インデックスはクエリに適用されません。有効になりません。 、およびクエリの効率は向上しません。


この記事が私の友達に役立つなら、私はいいねとサポートをしたいと思います〜ありがとうございました〜


おすすめ

転載: blog.csdn.net/weixin_42306958/article/details/123079074