MySQL挿入パフォーマンスを最適化する方法の例

MySQL挿入パフォーマンスを最適化する方法の例

MySQL パフォーマンスの最適化

MySQL パフォーマンスの最適化とは、リソースを合理的に配置し、システム パラメータを調整することで、MySQL の実行速度を速め、より多くのリソースを節約することです。 MySQL パフォーマンスの最適化には、クエリ速度の最適化、更新速度の最適化、MySQL サーバーの最適化などが含まれます。このブログでは、クエリの最適化、データベース構造の最適化、MySQL サーバーの最適化という 3 つの側面を紹介します。

MySQL データベースの最適化は、一方ではシステムのボトルネックを特定し、MySQL データベースの全体的なパフォーマンスを向上させることです。他方では、ユーザー操作の応答速度を向上させるために合理的な構造設計とパラメータ調整が必要です。同時に、システムがより大きな負荷のサービスを提供できるように、システムリソースを可能な限り節約することも必要です。たとえば、ファイルシステムを最適化することで、ディスク I\O の読み取りおよび書き込み効率を向上させることができます。オペレーティングシステムのスケジューリング戦略を最適化することで、高負荷時の MySQL の負荷容量を向上させることができます。テーブル構造、インデックス、クエリステートメントなどを最適化することで、クエリ応答を高速化することができます。

MySQL の挿入ステートメントの構文と、MySQL の挿入パフォーマンスを最適化する方法の紹介。

`table`(`field1`,`field2`) に値('value1','value2') を挿入します。

挿入性能を向上させる方法

1. 1つのSQL文で複数のレコードを挿入する

`insert_table` (`uid`, `content`, `type`) に値 ('userid_0', 'content_0', 0) を挿入します。 
`insert_table` (`uid`, `content`, `type`) に値 ('userid_1', 'content_1', 1) を挿入します。

次のように書くことができる

`insert_table` (`uid`, `content`, `type`) に値 ('userid_0', 'content_0', 0), ('userid_1', 'content_1', 1); を挿入します。

2. トランザクションを使用する

トランザクションを開始します。 
`insert_table` (`uid`, `content`, `type`) に値 ('userid_0', 'content_0', 0) を挿入します。 
`insert_table` (`uid`, `content`, `type`) に値 ('userid_1', 'content_1', 1) を挿入します。 
... 
専念;

知らせ

1. SQL 文の長さには制限があるため、SQL 文をマージするときは注意してください。長さの制限は max_allowed_pa​​cket 設定項目を通じて変更できます。デフォルトは 1M です。

2. トランザクションが大きすぎると実行効率に影響します。MySQL には innodb_log_buffer_size 設定項目があります。この値を超えるとディスクデータが使用され、実行効率に影響します。

トランザクション構成項目の説明:

innodb_バッファプールサイズ

Innodb を使用する場合、これは重要な変数です。 MyISAM と比較すると、Innodb はバッファ サイズに対してより敏感です。 MySIAM は大量のデータに対してデフォルトの key_buffer_size で問題ないかもしれませんが、Innodb は大量のデータに対してデフォルト値で上昇しているように感じます。 Innodb のバッファ プールはデータとインデックスをキャッシュするため、システム キャッシュ用のスペースを残す必要はありません。Innodb のみを使用する場合は、この値をメモリの 70% ~ 80% に設定できます。 key_buffer と同様に、データ量が少なく、あまり増加しない場合は、この値を高く設定しすぎないことでメモリ使用量を改善することもできます。

innodb_追加プールサイズ

少なくともオペレーティング システムがメモリを適切に割り当てることができる場合、この影響はあまり顕著ではありません。ただし、Innodb が他の目的に割り当てるメモリの量を確認するには、20M 以上に設定する必要がある場合があります。

innodb_log_file_size

これは、大量のデータ、特に大容量のデータを書き込むときに非常に重要です。ファイルが大きいほどパフォーマンスは向上しますが、データベースの復元には時間がかかることに注意してください。通常は、サーバーの容量に応じて 64M ~ 512M を使用します。

innodb_log_buffer_size

中程度の書き込み操作と短いトランザクションを使用するほとんどの用途では、デフォルト値で十分です。頻繁に更新したり、大量の BLOB データを使用したりする場合は、この値を増やす必要があります。ただし、大きすぎると、1 秒ごとにフラッシュ (中国語ではどのように言うのでしょうか?) が行われるため、メモリが無駄になります。したがって、1 秒よりも長く設定する必要はありません。通常は 8M ~ 16M で十分です。小さなアプリケーションは小さく設定できます。

innodb_flush_log_at_trx_commit

Innodb は MyISAM より 100 倍遅いと不満を言っていますか?おそらくこの値を調整するのを忘れたのでしょう。デフォルト値 1 は、トランザクションのコミットまたはトランザクション外の命令ごとにログをハード ディスクにフラッシュする必要があることを意味し、非常に時間がかかります。特にバッテリーバックアップキャッシュを使用する場合。多くのアプリケーションでは、特に MyISAM テーブルから転送する場合は、これを 2 に設定すると問題ありません。これは、データがハードディスクではなくシステム キャッシュに書き込まれることを意味します。ログは毎秒ディスクにフラッシュされるため、通常は 1 ~ 2 秒以上の更新が失われることはありません。 0 に設定すると高速になりますが、安全性が低下し、MySQL がクラッシュした場合でもトランザクション データが失われる可能性があります。値が 2 の場合、オペレーティング システム全体がクラッシュした場合にのみデータが失われる可能性があります。

要約する

上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。

以下もご興味があるかもしれません:
  • MySQL 挿入ステートメント操作例の説明
  • mysql 操作の概要 INSERT と REPLACE
  • MySQL で挿入と選択をネストする方法
  • MySQL INSERT INTO ステートメントの正しい使用方法
  • MYSQL ヒント - LAST_INSERT_ID
  • MySQL での挿入ステートメントの使用と最適化に関するチュートリアル
  • MySql 挿入操作に関する 3 つのヒント
  • MySQL での大規模トランザクションによって発生する挿入の遅延ケースの分析

<<:  Docker コンテナ入門から夢中になるまで(推奨)

>>:  JSはreduce()メソッドを使用してツリー構造データを処理します

推薦する

Vue.jsクラウドストレージで画像アップロード機能を実現

序文ヒント:以下はこの記事の主な内容です。以下のケースを参考にしてください。 1. オブジェクトスト...

元のPATHを上書きしてコマンドが見つからないというメッセージが表示されるコマンド失敗の問題を解決する方法

同僚から、LINUX サーバー上の多くのコマンドが (コマンドが見つかりません) というプロンプトで...

Linux で MySQL をインストールする簡単な方法

Linux に MySQL をインストールする方法をオンラインで検索すると、多くの方法が表示されまし...

CSS の高度な使い方(実戦で活用)

1. ul タグには、Mozilla ではデフォルトでパディング値がありますが、IE ではマージン値...

Nginx フォワード プロキシとリバース プロキシ、および負荷分散機能の構成コード例

この記事は主に、Nginx のフォワード プロキシとリバース プロキシ、および負荷分散機能の設定コー...

MySQL の最初のインストールが成功した後にパスワードを初期化する手順

ファイルをディレクトリに解凍しますこれは解凍後のディレクトリですmy.iniファイルを入力しますダブ...

Docker バインディング固定 IP/クロスホストコンテナ相互アクセス操作

序文これまでは、パイプワークで割り当てた静的 IP は一時的なものであり、再起動すると無効になってい...

MySQLのパスワードを忘れた場合の対処方法

MySQL パスワードを忘れた場合の解決策: [root@localhost ~]# mysql -...

SQL と NoSQL の違いのまとめ

主な違い: 1. タイプSQL データベースは主にリレーショナル データベース (RDBMS) とし...

さまざまなHTTPリターンステータスコードの詳細な説明

サイト上のページを表示するためのリクエストがサーバーに送信されると(たとえば、ユーザーがブラウザでペ...

LinuxサーバーでRabbitMQ管理ページにアクセスできない問題を解決

私のプロジェクトの特定の機能ではサーバーが rabbitmq にメッセージを送信する必要があるため、...

MySQLの分離レベルとロックメカニズムの詳細な説明

目次簡単な説明: 1. 取引の4つの特徴2. 複数の同時トランザクションによって発生する問題3. ト...

Intellij IDEA による Docker イメージの展開方法の手順の迅速な実装

目次1. Dockerはリモートアクセスを可能にする2. Intellij IDEAにDockerプ...

MySQLカスタム関数とストアドプロシージャの詳細な説明

序文この記事では主にMySQLのカスタム関数とストアドプロシージャに関する関連コンテンツを紹介し、皆...

シンプルなタブバー切り替えケースを実現するJavaScript

この記事では、タブバーの切り替え効果を簡単に実現するためのJavaScriptの具体的なコードを参考...