1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DelphiAdvent Calendar 2015

Day 21

DB登録方法の違いによるパフォマンス比較

Last updated at Posted at 2024-01-27

この投稿は Delphi Advent Calendar 2015 の21日目の記事です。

はじめに

同じコンポーネントを使っても、データベースに登録する方法は複数あります。
今回は、その方法の違いによるパフォーマンスの比較をしたいと思います。

確認方法

コンポーネントは、FireDACを使います。Delphiは、10 Seattle、データベースは、PostgreSQLを使いました。
データは、日本郵便株式会社のサイトからダウンロードした郵便番号データを使用しました。
件数は、123,907件です。項目は、新旧郵便番号と、県市区町村名のカナと漢字名で9項目のフィールド対象としています。
このデータをテーブルに追加する処理で確認します。

登録方法の比較は下記の3種類。すべて、TFDQueryを使います。
1)ChashUpdateを使用し、全件Append->Post後、ApplyUpdatesする。
2)Insert文を使い、ExecSQLで1件づつ全件登録します。
3)同じく、Insert文を使用し、配列DMLを使います。配列数は2パターン計測したものを示します。

計測結果

計測値です。それぞれ2回計測を行っています。

パターン 1回目(hh:nn:ss.zzz) 2回目(hh:nn:ss.zzz)
1)  00:04:23.610  00:06:49.251
2)  00:01:22.688  00:02:21.500
3)  ArraySize = 5000  00:00:07.126  00:00:07.031
3)  ArraySize = 10  00:00:28.047  00:00:41.969

配列DMLでArraSizeが大きいものが圧倒的に早いようです。
データ移行や、バッチ系の処理で、処理時間が気になるようなときは、配列DMLが有効なようです。ArraySizeは、大きいほうがよいと言うこと上記からわかりますが、あまり大きくするとメモリのエラーが出ます。
最初、ArraySizeをデータ件数(123,907)にしたら駄目でした。1万件でも駄目で、上記5000件はOKでした。
その間は確認してません。このあたりはパラメータの項目数などによって、調整が必要なようです。
ここのQ4に情報があるようです。いまいち意味がわからないですが、結局環境によって違うってことなのかなと思います。

*2021/10/15 追記
配列DMLを使ってよくわからないエラーが出るときは、ArraySizeを減らしてみるとうまくいくケースがある。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?