ホームページ データベース mysql チュートリアル SQL Server插入或者批量导入大量数据的性能表现

SQL Server插入或者批量导入大量数据的性能表现

Jun 07, 2016 pm 05:54 PM
sql server バッチインポート 入れる

我经常看到客户测试SQL Server 的插入(INSERT)或者批量导入大量数据的性能表现。其中有测试大量INSERT的TSQL脚本如下: use myDB go create table t1 ( id int primary key not null identity ( 1 , 1 ), name varchar ( 200 ), memo char ( 500 )); go trun

我经常看到客户测试SQL Server 的插入(INSERT)或者批量导入大量数据的性能表现。其中有测试大量INSERT的TSQL脚本如下:

use myDB

go

createtable t1(id intprimarykeynotnullidentity (1,1),name varchar(200),memo char(500));

go

truncatetable t1

go

declare @i int

set @i=0

declare @beginTime datetime,@endTime datetime

set @beginTime=GETDATE()

while(@i200000)

begin

 insertinto t1(name,memo)values('test'+str(RAND()*100000000),'memo'+str(RAND()*100000000))

 set @i=@i+1

end

set @endTime=GETDATE()

select @endTime-@beginTime

上面这个脚本测试插入200000行数据需要的时间。这个脚本有问题么?

语法没有问题,但是写法却不够优化。如果你使用performance  monitor

来观察,就会发现在数据插入期间log flushes/sec的次数非常高。在我的机器上达到5000。Log flushes发生一次,意味着SQL server 需要写入事务日志(transaction log)一次。每秒5000次的日志写动作导致磁盘大量的写操作。正是这个磁盘写操作影响了上面的batch的性能。我上面脚本在我的机器上使用了大概40秒左右的时间。

如何改进这个脚本的性能呢?如何减少log flushes/sec从而减少磁盘的写操作? 答案是使用Batch Size如下面脚本所示。

truncatetable t1

go

declare @i int

set @i=0

declare @beginTime datetime,@endTime datetime

set @beginTime=GETDATE()

declare @batchSize int

set @batchSize=1000

while(@i00000)

begin

 if (@i%@batchSize=0)

    begin

      if (@@TRANCOUNT>0)COMMITTRAN

      BEGINTRAN

    end

   

 insertinto t1(name,memo)values('test'+str(RAND()*100000000),'memo'+str(RAND()*100000000))

 set @i=@i+1

end

 if (@@TRANCOUNT>0)COMMITTRAN

set @endTime=GETDATE()

select @endTime-@beginTime

黄色高亮是我改进的地方。我在同样的机器上跑了一下,奇迹发生了,它只使用了7秒多一点。快了5倍多!如果在看下performance

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

SQL での MINUS 演算子の使用 SQL での MINUS 演算子の使用 Feb 18, 2024 pm 04:53 PM

SQL での MINUS の使用法と具体的なコード例 SQL では、MINUS は 2 つの結果セット間の差分演算を実行するために使用される演算子です。これは、2 番目の結果セットと同じ行を最初の結果セットから削除するために使用されます。 MINUS 演算子によって返される結果セットには、最初の結果セットにのみ存在する行が含まれます。以下では、特定のコード例を使用して MINUS の使用法を示します。 「table1」と「table2」という 2 つのテーブルがあると仮定します。それらの構造は次のとおりです。 テーブル名: table1 フィールド

Javaリストにnull値を挿入できますか? Javaリストにnull値を挿入できますか? Aug 20, 2023 pm 07:01 PM

解決策はい、add() メソッドを使用して簡単に null 値をリストに挿入できます。List 実装の場合、null はサポートされていないため、NullPointerException がスローされます。Syntaxbooleanadd(Ee) 指定された要素をこのリストの末尾に追加します。型パラメーター E -要素の実行時の型。パラメータ e −このリストに追加される要素

Microsoft SQLサーバーとはどのようなソフトウェアですか? Microsoft SQLサーバーとはどのようなソフトウェアですか? Feb 28, 2023 pm 03:00 PM

Microsoft SQL Server は、Microsoft によって発売されたリレーショナル データベース管理システムです。統合されたビジネス インテリジェンス (BI) ツールを使用してエンタープライズ レベルのデータ管理を提供する包括的なデータベース プラットフォームです。使いやすく、拡張性が高く、高いパフォーマンスを備えています。関連ソフトウェアとの統合度が高く、高い利点があります。 SQL Server データベース エンジンは、リレーショナル データと構造化データに対して、より安全で信頼性の高いストレージ機能を提供し、ユーザーがビジネス向けに可用性とパフォーマンスの高いデータ アプリケーションを構築および管理できるようにします。

WPSドキュメントに中国地図のグラフィックとテキストを挿入する方法 WPSドキュメントに中国地図のグラフィックとテキストを挿入する方法 Mar 27, 2024 pm 02:01 PM

1. wps ソフトウェアを開き、wps テキスト操作インターフェイスに入ります。 2. このインターフェースで挿入オプションを見つけます。 3. [挿入] オプションをクリックし、編集領域で [形状] オプションを見つけます。 4. 形状オプションをクリックし、そのサブメニューで推奨オプションを見つけます。 5. 推奨オプションで中国マップ オプションを見つけます。 6. [中国地図] オプションをクリックし、編集入力領域でマウスの左ボタンでドラッグして、必要な中国地図を取得します。

MongoDB を使用してデータの一括インポートおよびエクスポート機能を実装する方法 MongoDB を使用してデータの一括インポートおよびエクスポート機能を実装する方法 Sep 20, 2023 am 10:00 AM

MongoDB を使用してデータのバッチ インポートとエクスポートを実装する方法 MongoDB は NoSQL データベースであり、非リレーショナル データベースとして、データ ストレージとクエリにおいて優れた柔軟性とパフォーマンス上の利点があります。データのバッチ インポートおよびエクスポートが必要なアプリケーション シナリオのために、MongoDB は対応するツールとインターフェイスも提供します。この記事では、MongoDB を使用してデータのバッチ インポートおよびバッチ エクスポートを実装する方法を紹介し、具体的なコード例を示します。 1. MongoDB にデータをバッチインポートします。

PHP を使用して製品在庫をバッチでインポートする方法 PHP を使用して製品在庫をバッチでインポートする方法 Aug 17, 2023 pm 02:21 PM

PHP を使用して商品在庫の一括インポート機能を実装する方法 電子商取引プラットフォームでは、商品在庫の一括インポートは一般的な要件です。一括インポートにより、加盟店は多数の商品の在庫情報を迅速に更新でき、作業効率が向上します。この記事では、加盟店の在庫管理を容易にするこの機能を PHP プログラミング言語を使用して実装する方法を紹介します。まず、製品の在庫情報を保存するテーブル ファイルを作成する必要があります。このフォーム ファイルは Excel または CSV 形式で、販売者は製品名を含む製品情報を入力できます。

SQLサーバーかMySQLか?新しい調査により、データベースの最適な選択が明らかになりました。 SQLサーバーかMySQLか?新しい調査により、データベースの最適な選択が明らかになりました。 Sep 08, 2023 pm 04:34 PM

SQLServer それとも MySQL?最新の調査により最適なデータベースの選択が明らかに 近年、インターネットやビッグデータの急速な発展に伴い、データベースの選択は企業や開発者にとって重要な課題となっています。多くのデータベースの中でも、最も一般的で広く使用されている 2 つのリレーショナル データベースである SQL Server と MySQL は、非常に物議を醸しています。では、SQLServer と MySQL のどちらを選択すればよいでしょうか?最新の研究により、この問題が明らかになりました。まず、

PHP および SQL Server データベースの開発 PHP および SQL Server データベースの開発 Jun 20, 2023 pm 10:38 PM

インターネットの普及に伴い、Web サイトやアプリケーションの開発は多くの企業や個人の主要なビジネスになりました。 PHP と SQLServer データベースは 2 つの非常に重要なツールです。 PHP は動的な Web サイトの開発に使用できるサーバー側スクリプト言語であり、SQL Server は Microsoft によって開発されたリレーショナル データベース管理システムであり、幅広いアプリケーション シナリオを備えています。この記事では、PHPとSQL Serverの開発とそのメリット、デメリット、活用方法について説明します。まず、しましょう

See all articles