MySQL で SQL ステートメントを最適化する方法
1. 概要
アプリケーション システムの開発プロセスでは、初期データ量が少ないため、開発者は SQL ステートメントを記述する際に機能実装に重点を置きますが、アプリケーション システムが正式に起動されると、量の急速な増加に伴い、多くの SQL ステートメントでパフォーマンス上の問題が徐々に現れ始め、本番環境への影響がますます大きくなり、現在、これらの問題のある SQL ステートメントがシステム全体のボトルネックになっています。システムのパフォーマンスに影響するため、それらを最適化する必要があります。
2. show status コマンドを使用して、さまざまな SQL の実行頻度を理解します。
MySQL クライアントが正常に接続された後、show [session|global]status を通じてサーバーのステータス情報を提供できます。コマンドを使用するか、オペレーティング システムで mysqladmin extend-status コマンドを使用してこれらのメッセージを取得できます。 show [session|global] status では、必要に応じてパラメータ「session」または「global」を追加して、セッション レベル (現在の接続) での統計結果と、(データベースが最後に起動されて以降の) グローバル レベルでの統計結果を表示できます。 )。記述されていない場合、デフォルトのパラメータは「session」が使用されます。
次のコマンドは、現在のセッションのすべての統計パラメータの値を表示します:
-- 查看会话所有统计的值 SHOW STATUS LIKE 'Com_%'; Or SHOW SESSION STATUS LIKE 'Com_%';
次のコマンドは、すべての統計パラメータの値を表示します。現在のグローバルのパラメータ:
-- すべてのグローバル統計の値を表示します
SHOW GLOBAL STATUS LIKE 'Com_%';
Com_xxx は、各 xxx ステートメントが実行された回数を示します通常、次の統計を考慮します。 パラメータ:
Com_select: SELECT 操作を実行する回数。1 つのクエリに対して 1 だけが蓄積されます。
Com_insert: INSERT 操作が実行された回数。バッチ挿入 INSERT 操作の場合、1 回だけ累積されます。
Com_update: UPDATE 操作が実行された回数。
Com_delete: DELETE 操作を実行する回数。
上記のパラメータは、すべてのストレージ エンジン テーブル操作に対して蓄積されます。これらのパラメータは InnoDB ストレージ エンジンにのみ適用され、その蓄積アルゴリズムは若干異なります。
Innodb_rows_read: SELECT クエリによって返される行の数。
Innodb_rows_inserted: INSERT 操作中に挿入された行の数。
Innodb_rows_updated: UPDATE 操作によって更新された行の数。
Innodb_rows_deleted: DELETE 操作によって削除された行の数。
上記のパラメータを通じて、現在のデータベース アプリケーション システムが主に挿入および更新操作に基づいているのか、クエリ操作に基づいているのか、またさまざまな種類の SQL の一般的な実行に基づいているのかを簡単に理解できます。 . 比率とは何ですか。コミットまたはロールバックに関係なく、更新操作のカウントは累積され、カウント オブジェクトは実行回数になります。
トランザクション アプリケーションの場合、Com_commit と Com_rollback を使用して、トランザクションの送信とロールバックを理解できます。ロールバック操作が非常に頻繁に行われるデータベースの場合、アプリケーションの作成に問題がある可能性があります。さらに、次のパラメータは、ユーザーがデータベースの基本的な状況を理解するのに役立ちます。
Connections: MySQL サーバーへの接続の試行回数。
- #稼働時間: サーバーの稼働時間。
- Slow_queries: 遅いクエリの数。
- 低速クエリ ログを通じて、実行効率の低い SQL ステートメントを見つけます。 --log-slow-queries[=file_name] オプションで開始すると、mysqld はすべての実行時間を含むファイルを書き込みますlong_query_time 秒間の SQL ステートメントのログ ファイルを超えています。
- スロー クエリ ログはクエリの完了後に記録されるため、アプリケーション システムが実行効率の問題を反映している場合、スロー クエリ ログをクエリしても問題を特定できません。現在の MySQL を表示するコマンド。スレッドのステータス、テーブルをロックするかどうかなど、進行中のスレッドで SQL の実行ステータスをリアルタイムで確認し、同時に一部のテーブル ロック操作を最適化できます。
select_type: SELECT タイプを表し、一般的な値は次のとおりです:
- SIMPLE (単純なテーブル、つまりテーブル接続やサブクエリは使用されません)。
- table: 結果セットを出力するテーブル。
type:表示表的连接类型,性能由好到差的连接类型为:
system(表中仅有一行,即常量表)。
const(单表中最多有一个匹配行,例如primary key或者unique index)。
eq_ref(对于前面的每一行,在此表中只查询一条记录,简单来说,就是多表连接中使用primary key或者unique index)。
ref(与eq_ref类似,区别在于不是使用primary key或者unique index,而是使用普通的索引)。
ref_or_null(与ref类似,区别在于条件中包含对NULL的查询)。
index_merge(索引合并优化)。
unique_subquery(in的后面是一个查询主键字段的子查询)。
index_subquery(与unique_subquery类似,区别在于in的后面是查询非唯一索引字段的子查询)。
range(单表中的范围查询)。
index(对于前面的每一行,都通过查询索引来得到数据)。
all(对于前面的每一行,都通过全表扫描来得到数据)。
possible_keys:表示查询时,可能使用的索引。
key:表示实际使用的索引。
key_len:索引字段的长度。
rows:扫描行的数量。
filtered:返回结果的行占需要读到的行(rows列的值)的百分比。
Extra:执行情况的说明和描述。
Using index(此值表示mysql将使用覆盖索引,以避免访问表)。
Using where(mysql 将在存储引擎检索行后再进行过滤,许多where条件里涉及索引中的列,当(并且如果)它读取索引时,就能被存储引擎检验,因此不是所有带where子句的查询都会显示“Using where”。“Using where”有时提示了一种可能性:查询可以从不同的索引中受益。
Using temporary(mysql 对查询结果排序时会使用临时表)。
MySQL will apply an external index sorting on the results instead of reading rows from the table in index order.。mysql有两种文件排序算法,这两种排序方式都可以在内存或者磁盘上完成,explain不会告诉你mysql将使用哪一种文件排序,也不会告诉你排序会在内存里还是磁盘上完成)。
Range checked for each record(index map: N) (没有好用的索引,新的索引将在联接的每一行上重新估算,N是显示在possible_keys列中索引的位图,并且是冗余的)。
- PRIMARY (メインクエリ、つまり外側のクエリ)、UNION (UNION 内の 2 番目以降のクエリ文)、◎SUBQUERY (サブクエリ内の最初の SELECT) )wait。
5.确定问题并采取相应的优化措施
经过以上定位步骤,我们基本就可以分析到问题出现的原因。此时我们可以根据情况采取相应的改进措施,进行优化提高语句执行效率。
在上面的例子中,已经可以确认是goods_stock是走主键索引的,但是对goods_stock_price子表的进行了全表扫描导致效率的不理想,那么应该对goods_stock_price表的GoodsStockID字段创建索引,具体命令如下:
-- 创建索引 CREATE INDEX idx_stock_price_1 ON goods_stock_price (GoodsStockID); -- 附加删除跟查询索引语句 ALTER TABLE goods_stock_price DROP INDEX idx_stock_price_1; SHOW INDEX FROM goods_stock_price;
创建索引后,我们再看一下这条语句的执行计划,具体如下:
EXPLAIN SELECT SUM(sp.Qty) FROM goods_stock AS s LEFT JOIN goods_stock_price AS sp ON s.ID=sp.GoodsStockID;
可以发现建立索引后对goods_stock_price子表需要扫描的行数明显减少(从 3 行减少到1行),可见索引的使用可以大大提高数据库的访问速度,尤其在表很庞大的时候这种优势更为明显。
以上がMySQL で SQL ステートメントを最適化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











MySQLはオープンソースのリレーショナルデータベース管理システムであり、主にデータを迅速かつ確実に保存および取得するために使用されます。その実用的な原則には、クライアントリクエスト、クエリ解像度、クエリの実行、返品結果が含まれます。使用法の例には、テーブルの作成、データの挿入とクエリ、および参加操作などの高度な機能が含まれます。一般的なエラーには、SQL構文、データ型、およびアクセス許可、および最適化の提案には、インデックスの使用、最適化されたクエリ、およびテーブルの分割が含まれます。

データベースとプログラミングにおけるMySQLの位置は非常に重要です。これは、さまざまなアプリケーションシナリオで広く使用されているオープンソースのリレーショナルデータベース管理システムです。 1)MySQLは、効率的なデータストレージ、組織、および検索機能を提供し、Web、モバイル、およびエンタープライズレベルのシステムをサポートします。 2)クライアントサーバーアーキテクチャを使用し、複数のストレージエンジンとインデックスの最適化をサポートします。 3)基本的な使用には、テーブルの作成とデータの挿入が含まれ、高度な使用法にはマルチテーブル結合と複雑なクエリが含まれます。 4)SQL構文エラーやパフォーマンスの問題などのよくある質問は、説明コマンドとスロークエリログを介してデバッグできます。 5)パフォーマンス最適化方法には、インデックスの合理的な使用、最適化されたクエリ、およびキャッシュの使用が含まれます。ベストプラクティスには、トランザクションと準備された星の使用が含まれます

MySQLは、そのパフォーマンス、信頼性、使いやすさ、コミュニティサポートに選択されています。 1.MYSQLは、複数のデータ型と高度なクエリ操作をサポートし、効率的なデータストレージおよび検索機能を提供します。 2.クライアントサーバーアーキテクチャと複数のストレージエンジンを採用して、トランザクションとクエリの最適化をサポートします。 3.使いやすく、さまざまなオペレーティングシステムとプログラミング言語をサポートしています。 4.強力なコミュニティサポートを提供し、豊富なリソースとソリューションを提供します。

Apacheはデータベースに接続するには、次の手順が必要です。データベースドライバーをインストールします。 web.xmlファイルを構成して、接続プールを作成します。 JDBCデータソースを作成し、接続設定を指定します。 JDBC APIを使用して、接続の取得、ステートメントの作成、バインディングパラメーター、クエリまたは更新の実行、結果の処理など、Javaコードのデータベースにアクセスします。

DockerでMySQLを起動するプロセスは、次の手順で構成されています。MySQLイメージをプルしてコンテナを作成および起動し、ルートユーザーパスワードを設定し、ポート検証接続をマップしてデータベースを作成し、ユーザーはすべての権限をデータベースに付与します。

WebアプリケーションにおけるMySQLの主な役割は、データを保存および管理することです。 1.MYSQLは、ユーザー情報、製品カタログ、トランザクションレコード、その他のデータを効率的に処理します。 2。SQLクエリを介して、開発者はデータベースから情報を抽出して動的なコンテンツを生成できます。 3.MYSQLは、クライアントサーバーモデルに基づいて機能し、許容可能なクエリ速度を確保します。

CentOSにMySQLをインストールするには、次の手順が含まれます。適切なMySQL Yumソースの追加。 yumを実行して、mysql-serverコマンドをインストールして、mysqlサーバーをインストールします。ルートユーザーパスワードの設定など、MySQL_SECURE_INSTALLATIONコマンドを使用して、セキュリティ設定を作成します。必要に応じてMySQL構成ファイルをカスタマイズします。 MySQLパラメーターを調整し、パフォーマンスのためにデータベースを最適化します。

MySQLをエレガントにインストールするための鍵は、公式のMySQLリポジトリを追加することです。特定の手順は次のとおりです。MYSQLの公式GPGキーをダウンロードして、フィッシング攻撃を防ぎます。 mysqlリポジトリファイルを追加:rpm -uvh https://dev.mysql.com/get/mysql80-community-rease-el7-3.noarch.rpm update yumリポジトリキャッシュ:yumアップデートインストールmysql:yumインストールmysql-server startup mysql sportin
