( SNS でもう少し条件を考えた方がいいかもしれないと指摘をしていただきました。全面的に改定しました。Y 先生、T 様 ありがとうございます。ExecuteSQL も検証に加えました。 2017/12/18 23:28 )
ほぼ全ての FileMaker ユーザーの使用している機能のうちの一つ、検索。
検索の方法はいくつかあり、ユーザーはそれぞれ好きな方法を使っている。
今回は、通常の検索と、記憶しての検索、クイック検索の速度の測定をして見ました。
郵便局のサイトから入手可能の、全国郵便番号のデータを利用させていただきました。
クイック検索はそのまま使用すると、レイアウト内にある全てのフィールドを検索してしまうので、平等性を期すために、一つしか検索しないように設定いたしました。
条件macOS High Sierra バージョン 10.13.3
MacBook Pro (15-inch,2016)
プロセッサ 2.6 GHz Intel Core i7
メモリ 16 GB 2133 MHz LPDDR3
FileMaker Pro Advanced 16.0.3.302
郵便局データ 124162 レコード
郵便番号フィールド 索引設定済み (すべて)
レイアウトでは郵便番号フィールドにのみクイック検索にフィールドを含める
通常検索全レコードを表示
検索モードに切り替え [ 一時停止: オフ ]
フィールド設定 [ KEN_ALL::f3 ; Get ( スクリプト引数 ) ]
変数を設定 [ $ms ; 値: Get ( 現在の時刻 UTC ミリ秒 ) ]
検索実行 []
現在のスクリプト終了 [ テキスト結果: Get ( 現在の時刻 UTC ミリ秒 ) - $ms ]
検索 ( 記憶する )全レコードを表示
変数を設定 [ $検索 ; 値: Get ( スクリプト引数 ) ]
変数を設定 [ $ms ; 値: Get ( 現在の時刻 UTC ミリ秒 ) ]
検索実行 [ 記憶する ]
現在のスクリプト終了 [ テキスト結果: Get ( 現在の時刻 UTC ミリ秒 ) - $ms ]
クイック検索 ( 1 フィールドのみ )全レコードを表示
変数を設定 [ $検索 ; 値: Get ( スクリプト引数 ) ]
変数を設定 [ $ms ; 値: Get ( 現在の時刻 UTC ミリ秒 ) ]
クイック検索の実行 [ $検索 ]
現在のスクリプト終了 [ テキスト結果: Get ( 現在の時刻 UTC ミリ秒 ) - $ms ]
ExecuteSQL全レコードを表示
変数を設定 [ $SQL ; 値: "SELECT f3 FROM KEN_ALL WHERE f3 = ?" ]
変数を設定 [ $ms ; 値: Get ( 現在の時刻 UTC ミリ秒 ) ]
変数を設定 [ $ExecuteSQL ; 値: ExecuteSQL ( $SQL ; "" ; "" ; Get ( スクリプト引数 ) ) ]
現在のスクリプト終了 [ テキスト結果: Get ( 現在の時刻 UTC ミリ秒 ) - $ms ]
コントロール全レコードを表示
検索モードに切り替え [ 一時停止: オフ ]
変数を設定 [ $ms ; 値: Get ( 現在の時刻 UTC ミリ秒 ) ]
ブラウズモードに切り替え [ 一時停止: オフ ]
現在のスクリプト終了 [ テキスト結果: Get ( 現在の時刻 UTC ミリ秒 ) - $ms ]
方法
異なるテキストで 100 回検索し、その検索にかかった時間を測定する。それを 100 回行い、最大値、中央値、最小値を測定する
結果
クイック検索が早いですね。
考察
通常の検索がクイック検索と比べて遅い理由と思われるのは、( おそらく ) 検索モードからブラウズモードへの切り替えに時間がかかるためかもしれない。
クイック検索は、検索モード、ブラウズモードの切り替えを行わずにダイレクトに検索するため、速い結果として現れたのかもしれない。
検索 ( 記憶 ) が遅くなっている原因としては、一つのステップの中に、「フィールドを設定する」という行為を行なっているかもしれない。
(「検索モードに切り替え→フィールド設定→検索実行」の一連の流れの時間と比べるとほぼ同じであったため。)
検証ファイル
おわり
今回はFileMaker Advent Calendar 2017に参加する為に書きました。