検索
ホームページデータベースmysql チュートリアルMySQLのバッチSQL挿入のパフォーマンス最適化の詳細な説明

mysql チュートリアルバッチ SQL 挿入のカラム概要

MySQLのバッチSQL挿入のパフォーマンス最適化の詳細な説明

推奨 (無料): mysql チュートリアル

大量のデータを含む一部のシステムでは、クエリ効率が低いことに加えて、データベースが次のような問題に直面します。データがデータベースに保存されるまでに時間がかかるだけです。特にレポート システムの場合、データのインポートに費やす時間が毎日数時間から 10 時間以上かかる場合があります。したがって、データベース挿入のパフォーマンスを最適化することは理にかなっています。

#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);
    SQL 実行の効率が高くなる主な理由は次のとおりです。マージ ログ (mysql の binlog および InnoDB のトランザクション ログ) の量が削減され、データ量とログ フラッシュの頻度が減り、効率が向上します。
  • SQL ステートメントをマージすることにより、SQL ステートメントの解析数を減らし、ネットワーク送信 IO を削減することもできます。
データをそれぞれテストおよび比較し、単一のデータをインポートし、それをインポート用の SQL ステートメントに変換します。


MySQLのバッチSQL挿入のパフォーマンス最適化の詳細な説明

#トランザクションでの挿入処理

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;

トランザクションを使用すると、データ挿入の効率が向上します。これは、挿入操作が実行されると、MySQL の内部でトランザクションが作成され、実際の挿入処理操作がトランザクション内で実行されるためです。
  • トランザクションを使用して、トランザクション作成の消費を削減します。すべての挿入は実行前に送信されます。
  • データのテストと比較。トランザクションに適用されない書き込みテストとトランザクション操作を使用したテストに分割されます。

MySQLのバッチSQL挿入のパフォーマンス最適化の詳細な説明

データの規則的な挿入

データの規則的な挿入とは、シーケンシャルソート

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);
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 ('2', 'userid_2', 'content_2',2);
データベースは挿入時にインデックスデータを維持する必要があるため、不要なレコードがあるとインデックスを維持するコストが増加します。
InnoDB で使用される B ツリー インデックスを参照してください。挿入された各レコードがインデックスの最後にある場合、インデックスの配置効率が非常に高く、インデックスの調整が少なくなります。 ; 挿入されたレコードがインデックスの途中で B ツリーを分割およびマージする必要がある場合、より多くのコンピューティング リソースが消費され、挿入されたレコードのインデックス配置効率が低下します。頻繁なディスク操作。

テスト比較データ、ランダム データとシーケンシャル データのパフォーマンス比較

MySQLのバッチSQL挿入のパフォーマンス最適化の詳細な説明

最初にインデックスを削除し、 insert 完了後のインデックスの再構築

包括的なパフォーマンス テスト

MySQLのバッチSQL挿入のパフォーマンス最適化の詳細な説明

データのマージトランザクション データ量が少ないときはメソッドのパフォーマンスが明らかに向上しますが、データ量が多いときは急激にパフォーマンスが低下します。これは、データ量が innodb_buffer の容量を超えるためです。各位置決めインデックスはより多くのディスクを使用します。読み取りおよび書き込み操作が行われ、パフォーマンスがより速く低下します。
  • データ トランザクションをマージする順序どおりの方法は、データ ボリュームが数千万に達した場合でも適切に実行されます。データ ボリュームが大きい場合は、順序付きデータ インデックスの配置がより便利であり、頻繁に読み取りおよび書き込み操作を行う必要がありません。より高い値を維持できます

#注意事項##SQL ステートメントには長さの制限があるため、マージするときはデータ SQL の長さ制限は、同じ SQL 内で超えてはなりません。この制限は、

max_allowed_pa​​cket
    構成を通じて変更できます。デフォルトは
  • 1M

    ですが、8M# に変更できます。 ## テスト中。 トランザクションのサイズを制御する必要があります。大きすぎると実行効率に影響する可能性があります。 MySQL には innodb_log_buffer_size

    という設定項目があり、この値を超えると innodb データがディスクにフラッシュされるため、効率が低下します。したがって、より良いアプローチは、データがこの値に達する前にトランザクションのコミットを実行することです。

以上がMySQLのバッチSQL挿入のパフォーマンス最適化の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はlearnkuで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
图文详解mysql架构原理图文详解mysql架构原理May 17, 2022 pm 05:54 PM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于架构原理的相关内容,MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层,下面一起来看一下,希望对大家有帮助。

mysql怎么替换换行符mysql怎么替换换行符Apr 18, 2022 pm 03:14 PM

在mysql中,可以利用char()和REPLACE()函数来替换换行符;REPLACE()函数可以用新字符串替换列中的换行符,而换行符可使用“char(13)”来表示,语法为“replace(字段名,char(13),'新字符串') ”。

mysql怎么去掉第一个字符mysql怎么去掉第一个字符May 19, 2022 am 10:21 AM

方法:1、利用right函数,语法为“update 表名 set 指定字段 = right(指定字段, length(指定字段)-1)...”;2、利用substring函数,语法为“select substring(指定字段,2)..”。

mysql的msi与zip版本有什么区别mysql的msi与zip版本有什么区别May 16, 2022 pm 04:33 PM

mysql的msi与zip版本的区别:1、zip包含的安装程序是一种主动安装,而msi包含的是被installer所用的安装文件以提交请求的方式安装;2、zip是一种数据压缩和文档存储的文件格式,msi是微软格式的安装包。

mysql怎么将varchar转换为int类型mysql怎么将varchar转换为int类型May 12, 2022 pm 04:51 PM

转换方法:1、利用cast函数,语法“select * from 表名 order by cast(字段名 as SIGNED)”;2、利用“select * from 表名 order by CONVERT(字段名,SIGNED)”语句。

MySQL复制技术之异步复制和半同步复制MySQL复制技术之异步复制和半同步复制Apr 25, 2022 pm 07:21 PM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于MySQL复制技术的相关问题,包括了异步复制、半同步复制等等内容,下面一起来看一下,希望对大家有帮助。

带你把MySQL索引吃透了带你把MySQL索引吃透了Apr 22, 2022 am 11:48 AM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了mysql高级篇的一些问题,包括了索引是什么、索引底层实现等等问题,下面一起来看一下,希望对大家有帮助。

mysql怎么判断是否是数字类型mysql怎么判断是否是数字类型May 16, 2022 am 10:09 AM

在mysql中,可以利用REGEXP运算符判断数据是否是数字类型,语法为“String REGEXP '[^0-9.]'”;该运算符是正则表达式的缩写,若数据字符中含有数字时,返回的结果是true,反之返回的结果是false。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

EditPlus 中国語クラック版

EditPlus 中国語クラック版

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

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境