FileMaker Pro 15の新機能「テーブルデータを削除」②速度編

2016年05月18日 11:00 AM

FileMaker 15


FileMaker Pro 15の新機能「テーブルデータを削除」スクリプトステップが
一体どれだけ早いのか検証してみました!

今回の検証では30万件のレコードを用意し
1.新機能の「テーブルデータを削除」ステップを使用するスクリプト
2.従来の「対象レコード削除」ステップを使用するスクリプト
でどの程度速度に差があるのか実際に確認していきます。

実行する環境は以下の通りです。
・Windows 7 Professional
・Intel Core i5-4590 CPU 3.30GHz
・8Gメモリ

用意したファイルのテーブルは以下の構造です。
・フィールド数:7
・フィールドタイプ:テキスト、数字、日付、時刻、タイムスタンプ、オブジェクト、集計(数字フィールドの合計)
※ただし、オブジェクトタイプのフィールドは全レコード空欄です。
●検証用スクリプトの説明

1.新機能の「テーブルデータを削除」ステップを使用するスクリプト
del2_1_mini

「テーブルデータを削除」ステップを利用する前に現在の時間を取得しています。
また、ステップ実行後にも時間を取得しています。
その後、テスト結果を記録するためのテーブルにレコードを作成し
テスト結果をレコードの値として代入しています。
テストを実施後にどの程度時間がかかったのかを確認できるようにしています。

2.従来の「対象レコード削除」ステップを使用するスクリプト
del2_2_mini

1のスクリプトとほぼ同様です。
「テーブルデータを削除」ステップが
「対象レコード削除」ステップに変わっている部分のみ異なります。

■検証1 ~FileMaker Pro 14で「対象レコード削除」~

まずは前バージョンでの
「対象レコード削除」ステップの速さを確認しましょう。

本格的に検証するのであれば
何度か検証を繰り返していきたいところですが
今回はざっくりとどの程度早くなったのかに焦点を当てていきます。
del2_3_mini

del2_4_mini

30万件のレコードを削除するのに
9.107秒かかっています。

オブジェクトフィールドなどのデータ量の多いレコードではありませんが
特にストレスも感じることなく早く削除ができました。
■検証2 ~FileMaker Pro 15で「テーブルデータを削除」~

新機能の「テーブルデータを削除」ステップの速度を計測します。

del2_5_mini

結果は0.053秒!
早いです!ものすごく早い!

削除の進行度を示すダイアログが表示される間もなく
一瞬で30万レコードが削除されました。

「テーブルデータを削除」ステップでは
テーブル単位での削除となるため
対象レコードのみを削除するということはできませんが
その分圧倒的なスピードが強みとなりそうです。

全レコードを削除するスクリプトなどでは積極的に使用したいステップですね。
■検証3 ~FileMaker Pro 15で「対象レコード削除」~

ここで気になるのは旧バージョンからある「対象レコード削除」ステップです。
早速確認していきます。
全レコード(30万件)を表示している状態で実行します。

del2_6_new_mini

なんと30万件レコードの「対象レコード削除」ステップが
0.094秒で完了しました。
「テーブルデータを削除」ステップとほぼ同等の速度を記録しました。

「対象レコード削除」ステップについても大幅な速度改善が行われているようです。
■検証4 ~対象外レコード有の状態で「対象レコード削除」~

「対象レコード削除」ステップでは、
現在の対象レコードのみを削除したり、
リレーションシップグラフで関連しているレコードのオプションを考慮したりと
「テーブルデータを削除」よりも処理自体は複雑だと考えられます。

検証3では全レコードを表示している状態で
「対象レコード削除」ステップを行ったので
検証4,5,6ではもう少しだけ複雑な状態で
「対象レコード削除」ステップを確認していきます。

del2_7_mini

30万件のレコードの内1件のみを対象外としてみました。
この状態で「対象レコード削除」ステップを行います。

del2_8_mini

8.812秒で削除が行われました。
検証1にてFileMaker Pro 14を使用して30万件レコードに対して
「対象レコード削除」ステップを行った結果とほぼ同等です。
■検証5 ~関連レコードがある状態で「対象レコード削除」~

del2_9_mini

まず事前準備として30万件のレコードが存在する
TO「Sample」に対してリレーションを作成します。
今回新しく「Sample 2」というテーブルを作成しました。

オプションは特にはつけません。

del2_10_mini

TO「Sample 2」にレコードを3件作成しました。
この状態で30万件レコードの「対象レコード削除」ステップでの削除を行います。

del2_11_new_mini

0.054秒で削除が完了しました。
関連レコードはあるものの削除ステップに関係があるものではないので
速さを維持しています。
■検証6 ~削除オプション付きの関連レコードがある状態で「対象レコード削除」~

del2_12_mini

検証5で用意したリレーションシップに
「他方のテーブルでレコードが削除されたときにこのテーブルの関連レコードを削除する」
オプションにチェックを入れます。

del2_13_mini

35.109秒かかりました。
「対象レコード削除」ステップでは削除に関係のある関連レコードがあると
ある程度の時間がかかってしまいますね。
★まとめ

新機能の「テーブルデータを削除」ステップでの削除速度は
30万件のレコードを0.1秒かからずに削除しました。
※テーブル構造や環境等によって結果は変わると思われますので
検証結果については、あくまで参考値です。

従来の「対象レコード削除」ステップでは以下の条件の時に
「テーブルデータを削除」ステップと同等の削除速度でした。
・全レコードが表示されている
・「他方のテーブルでレコードが削除されたときにこのテーブルの関連レコードを削除する」
オプションにチェックが入っている関連レコードが存在しない

新機能の「テーブルデータを削除」ステップでは
対象レコードや関連レコードに関わらず
指定したテーブルのレコードが全て削除されてしまいますが
安定して高速な削除を実現していました。

頻繁に全レコード削除を行う場合には積極的に利用していきたいスクリプトステップです。

del2_14_mini