MySQL 選択最適化ソリューションに関する簡単な説明

MySQL 選択最適化ソリューションに関する簡単な説明

実生活からの例

社内の多くのクエリステートメントがselect * xxxxであることがわかりましたか?

私の頭の中にある考えは、他の人が select * と書いたので、それを書いて多くのトラブルを回避しよう、ということに違いありません。

クエリが遅い

  • まず、使用するデータベース クエリ ステートメントでアクセスされるデータが多すぎないか考えてみましょう。
  • 実際、パフォーマンスの低いクエリのほとんどは、アクセスするデータの量を減らすことで最適化できることが多いです。
  • *を選択すると、サーバーに追加のI/O、メモリ、CPU消費が発生するため

データベースの遅いクエリオーバーヘッドを示す 3 つの指標

  • 対応時間
  • スキャンされた行数
  • 返される行数

インデックスに移動すると

id = 1 の場合、stu から * を選択します。

インデックスはクエリを最適化し、10 個のデータのみを返します。ID インデックスがない場合、数百または数千行のデータがアクセスされると推定されます。

ヒント: MySQLのEXPLAINコマンドを使用して、行に対応する行数を表示します。

実際、最適な状況は、ストレージ エンジン レベルで where を介して一致しないレコードをフィルター処理することです。2 番目に最適な状況は、インデックス ヒット スキャンをカバーし、クエリのためにテーブルに戻らずに、サーバー レベルで where を介して一致しないレコードをフィルター処理することです。最適な状況は、データ テーブルからデータを返してから、条件を満たさないレコードをフィルター処理することです。

最適化する方法

インデックスカバレッジを使用して、必要なすべての列をインデックスに配置すると、テーブルに戻ってクエリを実行する必要がなくなり、テーブルを分離できます。

3. クエリをリファクタリングする(大きなクエリを小さなクエリに分割できます)

例: count、limit、max()

カウント

count では必然的に多数の行をスキャンする必要があるため、count の最適な最適化はサマリー テーブルを追加することです。

制限

次のコードに示すように、ページングを行うときに制限は非常に一般的です。

stu から id を選択し、id 制限で 1000,20 を並べ替えます。

このステートメントは 1020 個のデータをクエリし、最初の 1000 個を破棄して、1000 から 1020 までの 20 個のデータを返します。最適化する最良の方法は、インデックスを使用して、制限クエリを既知の位置を持つクエリに変換することです。

最大値と最小値 min&max

まず、主キーインデックスを使用する場合、クエリ時の最初の値が返したい最小値であると仮定します。主キーインデックスを使用して、limitを使用してデータ量を制御することもできます。これにより、min()関数の効果が得られ、minを置き換えることができます。

IDを選択 
スタから 
address = 'bj' limit 1 の場合、index(primay) を使用します。

これにより、可能な限り少ないレコードがスキャンされます。

最後に、リラックスするために2つの質問をしてみましょう。

`従業員` テーブルで 2 番目に高い給与を検索します (給与)
+----+--------+
| ID | 給与 |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
結果 +---------------------+
| 2番目に高い給与 |
+---------------------+
| 200 |
+---------------------+
答え: max(Salary) SecondHighestSalary を選択
従業員から 
給与 < (max(給与) を選択)
従業員より
`Person` テーブル内の重複する電子メール アドレスをすべて検索します。
+----+---------+
| ID | メール |
+----+---------+
| 1 | [email protected] |
| 2 | [email protected] |
| 3 | [email protected] |
+----+---------+

結果+---------+
| メール |
+---------+
| メール:
+---------+

回答: 個人からメールを選択 
メールでグループ化 
count(Email) >= 2 であること;

これで、MySQL 選択最適化ソリューションに関するこの記事は終了です。MySQL 選択最適化に関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL最適化ソリューション: スロークエリログを有効にする
  • MySQLクエリ最適化: 100万件のデータに対するテーブル最適化ソリューション
  • 大きなオフセットによる MySQL 制限ページングが遅い理由と最適化ソリューション
  • MySQLの大規模テーブル最適化ソリューションについての簡単な説明
  • MySQL 関数インデックス最適化ソリューション
  • MySQL 最適化ソリューション リファレンス
  • MySQLの一般的な最適化ソリューション

<<:  画像ソーシャルネットワーキングサイトのUIアプリケーションの比較分析(図)

>>:  ブラウザ内でHTMLタグを中央に配置するCSSスタイル

推薦する

コード例を通してページ置換アルゴリズムの原理を理解する

ページ置換アルゴリズム: 本質は、限られたメモリをワイヤレス プロセスに対応できるようにすることです...

Deepin Linuxでカーネルを手動でアップグレードする方法

deepinとUbuntuどちらもdebianをベースにしたディストリビューションであり、ここではU...

Mysqlデータベースの文字化けに対処する方法

MySQL では、データベースの文字化けは一般的に文字セットを設定することで修正できますが、文字化け...

VMware Workstation のインストール Linux システム

始める段階から初心者になるまで、Linux オペレーティング システムは不可欠です。最初のステップは...

Docker を使用してフロントエンド アプリケーションをデプロイする方法

Dockerはますます普及しています。環境を軽量かつ柔軟に分離し、容量を拡張し、運用保守管理を容易に...

MySQL 5.7.17 圧縮パッケージのインストールと設定方法のグラフィックチュートリアル

インターネット上にはMySQL 5.7.17のインストールチュートリアルがほとんどなく不十分なので、...

DockerにRedisをインストールし、設定ファイルとして起動する詳細な説明

更新: 最近、サーバーがマイニング ウイルスによってハッキングされたことが判明しました。これは、おそ...

Linux でスペースを含むファイルを削除する (ディレクトリではない)

日常業務では、スペースのないファイルに遭遇することがよくあります。これにより、削除操作がはるかに簡単...

docker compose デプロイメントにおけるマスタースレーブレプリケーションの実装

目次構成解析サービス構築ディレクトリ構造ファイルを作成インスタンス構成サービスを開始するテストRed...

Docker-compose におけるdepends_on 順序問題を解決する方法についての簡単な説明

コンテナをソートするためにdepends_onを使用しても、コンテナ間の依存関係の問題は完全には解決...

Pycharm2017はpython3.6とmysqlの接続を実現します

この記事では、pycharm2017でpython3.6とmysqlを接続する方法を参考までに紹介し...

Vue のリスナーの基本的な使用例

目次序文1. リスナーの基本的な使い方2. リスナー形式3. ページに入るとすぐに監視とディープモニ...

Tencent Cloud Server Tomcat ポートにアクセスできない場合の解決策

最近、Tencent Cloudを使用してサーバーを設定しました。使用中に、tomcatポートにアク...

Vue+WebSocket ページでの長時間接続のリアルタイム更新

最近、Vue プロジェクトではデータをリアルタイムで更新する必要があります。折れ線グラフは 1 秒ご...

MySQL データのバックアップと復元のサンプル コード

1. データのバックアップ1. mysqldumpコマンドを使用してバックアップするmysqldum...