この記事では、パフォーマンスを最適化するためのバッチ挿入を実装するための MySQL のチュートリアルを主に紹介します。パフォーマンスの最適化後の比較を表すために、実行時間が示されています。
大量のデータを含む一部のシステムの場合、データベース。クエリ効率が低いことに加えて、データベースにデータが保存されるまでに時間がかかるという問題があります。特にレポート システムの場合、データのインポートに費やす時間が毎日数時間から 10 時間以上かかる場合があります。したがって、データベース挿入のパフォーマンスを最適化することは理にかなっています。
MySQL innodb でいくつかのパフォーマンス テストを行った結果、挿入効率を向上させるいくつかの方法が見つかりましたので、ご参照ください。
1. 1 つの SQL ステートメントで複数のデータを挿入します。
INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('0', 'userid_0', 'content_0', 0); INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('1', 'userid_1', 'content_1', 1);
などの一般的に使用される挿入文は、次のように変更されます。
INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('0', 'userid_0', 'content_0', 0), ('1', 'userid_1', 'content_1', 1);
変更された挿入操作により、プログラムの挿入効率が向上します。ここで2つ目のSQLの実行効率が高い主な理由は、マージ後のログ量(MySQLのbinlogとinnodbのトランザクションログ)が減り、データ量とログフラッシュの頻度が減って効率が向上したことです。 SQL ステートメントをマージすることにより、SQL ステートメントの解析数を減らし、ネットワーク送信 IO を削減することもできます。
ここでは、単一のデータをインポートしてインポート用の SQL ステートメントに変換するテスト比較データと、それぞれ 100、1,000、および 10,000 個のデータ レコードをテストするテスト比較データを示します。
2. トランザクション内で挿入処理を行います。
挿入を次のように変更します:
START TRANSACTION; INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('0', 'userid_0', 'content_0', 0); INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('1', 'userid_1', 'content_1', 1); ... COMMIT;
3. データは順番に挿入されます。
データの順序付き挿入とは、挿入されたレコードが主キーに基づいて順番に配置されることを意味します。たとえば、datetime がレコードの主キーです:
INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('1', 'userid_1', 'content_1', 1); INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('0', 'userid_0', 'content_0', 0); INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('2', 'userid_2', 'content_2',2);
は、保守する必要があるため、次のように変更されます。インデックス データをデータベースに挿入する場合、順序付けされていません。 ロギングによりインデックスの維持コストが増加します。 innodb によって使用される B+tree インデックスを参照できます。挿入されたレコードがインデックスの最後にある場合、インデックスの配置効率は非常に高く、挿入されたレコードがインデックスの中央にある場合、インデックスの調整は小さくなります。インデックス、B+ツリーが必要です。分割やマージなどの処理により多くのコンピューティング リソースが消費され、データ量が多い場合、挿入されたレコードのインデックス配置効率が低下します。
ランダム データとシーケンシャル データのパフォーマンス比較を以下に示します。それぞれ 100、1000、10000、100000、100 万として記録されます。
テスト結果から判断すると、この最適化手法のパフォーマンスは向上していますが、その向上はあまり明らかではありません。
ここでは、INSERT 効率を最適化するために、上記の 3 つの方法を同時に使用するテストを示します。
データ量が少ない場合とデータ量が多い場合(1,000万以上)、データ+トランザクションをマージする方法のパフォーマンスの向上が明らかであることがテスト結果からわかります。これは、この時点でデータ量が innodb_buffer の容量を超えるため、より多くのディスク読み取りおよび書き込み操作が発生し、パフォーマンスが急速に低下するためです。マージされたデータ + トランザクション + 順序付けされたデータを使用する方法は、データ量が数千万に達した場合でも良好なパフォーマンスを発揮します。データ量が大きい場合は、順序付けされたデータのインデックス配置の方が便利であり、ディスク上で頻繁に読み取りおよび書き込み操作を行う必要がありません。したがって、高いパフォーマンスを維持することができる。
注:
1. SQL ステートメントには長さ制限があります。データをマージする場合、同じ SQL 内で SQL 長さ制限を超えてはなりません。デフォルトは 1M です。テスト中は8M。 2. トランザクションのサイズを制御する必要があります。大きすぎるトランザクションは実行効率に影響を与える可能性があります。 MySQL には innodb_log_buffer_size 設定項目があり、この値を超えると、innodb データがディスクにフラッシュされ、効率が低下します。したがって、より良いアプローチは、データがこの値に達する前にトランザクションをコミットすることです。
以上がパフォーマンスを最適化するにはどうすればよいですか? MySQL でバッチ挿入を実装してパフォーマンスを最適化する例の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

酸性属性には、原子性、一貫性、分離、耐久性が含まれ、データベース設計の基礎です。 1.原子性は、トランザクションが完全に成功するか、完全に失敗することを保証します。 2.一貫性により、データベースがトランザクションの前後に一貫性を保証します。 3.分離により、トランザクションが互いに干渉しないようにします。 4.永続性により、トランザクションの提出後にデータが永久に保存されることが保証されます。

MySQLは、データベース管理システム(DBMS)であるだけでなく、プログラミング言語にも密接に関連しています。 1)DBMSとして、MySQLはデータを保存、整理、取得するために使用され、インデックスを最適化するとクエリのパフォーマンスが向上する可能性があります。 2)SQLとPythonに埋め込まれたプログラミング言語とSQLalchemyなどのORMツールを使用すると、操作を簡素化できます。 3)パフォーマンスの最適化には、インデックス、クエリ、キャッシュ、ライブラリ、テーブル分割、およびトランザクション管理が含まれます。

MySQLはSQLコマンドを使用してデータを管理します。 1.基本コマンドには、select、挿入、更新、削除が含まれます。 2。高度な使用には、参加、サブクエリ、および集計関数が含まれます。 3.一般的なエラーには、構文、ロジック、パフォーマンスの問題が含まれます。 4。最適化のヒントには、インデックスの使用、Select*の回避、制限の使用が含まれます。

MySQLは、データの保存と管理に適した効率的なリレーショナルデータベース管理システムです。その利点には、高性能クエリ、柔軟なトランザクション処理、豊富なデータ型が含まれます。実際のアプリケーションでは、MySQLはeコマースプラットフォーム、ソーシャルネットワーク、コンテンツ管理システムでよく使用されますが、パフォーマンスの最適化、データセキュリティ、スケーラビリティに注意を払う必要があります。

SQLとMySQLの関係は、標準言語と特定の実装との関係です。 1.SQLは、リレーショナルデータベースの管理と操作に使用される標準言語であり、データの追加、削除、変更、クエリを可能にします。 2.MYSQLは、SQLを運用言語として使用し、効率的なデータストレージと管理を提供する特定のデータベース管理システムです。

INNODBは、レドログと非論的なものを使用して、データの一貫性と信頼性を確保しています。 1.レドログは、クラッシュの回復とトランザクションの持続性を確保するために、データページの変更を記録します。 2.Undologsは、元のデータ値を記録し、トランザクションロールバックとMVCCをサポートします。

説明コマンドのキーメトリックには、タイプ、キー、行、および追加が含まれます。 1)タイプは、クエリのアクセスタイプを反映しています。値が高いほど、constなどの効率が高くなります。 2)キーは使用されているインデックスを表示し、nullはインデックスがないことを示します。 3)行はスキャンされた行の数を推定し、クエリのパフォーマンスに影響します。 4)追加の情報を最適化する必要があるというFilesortプロンプトを使用するなど、追加情報を提供します。

Temporaryを使用すると、MySQLクエリに一時テーブルを作成する必要があることが示されています。これは、異なる列、またはインデックスされていない列を使用して順番に一般的に見られます。インデックスの発生を回避し、クエリを書き直し、クエリのパフォーマンスを改善できます。具体的には、expliect出力に使用を使用する場合、MySQLがクエリを処理するために一時テーブルを作成する必要があることを意味します。これは通常、次の場合に発生します。1)個別またはグループビーを使用する場合の重複排除またはグループ化。 2)Orderbyに非インデックス列が含まれているときに並べ替えます。 3)複雑なサブクエリを使用するか、操作に参加します。最適化方法には以下が含まれます。1)OrderbyとGroupB


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

WebStorm Mac版
便利なJavaScript開発ツール
