Delphi/C++BuilderでFireDACによるデータベースアクセスが遅いと感じたときはUnidirectional=Trueにしてみる
FireDACはハイパフォーマンスデータアクセスライブラリと言われているのですが、データベースから取得したデータをコードで処理する場合に、あんまり速く感じないことがあります。
そのような場合に FDQuery の FetchOption を調整して、読み取り専用アクセスにするとパフォーマンスが改善する場合があります。FireDACはデフォルトで双方向データセットなのですが、読み取り専用にすることで select クエリ実行時の性能を上げる、というアプローチです。
下記ページでは CursorKind, Mode, RowsetSize, Unidirectional の4つを設定するという説明がありますが、割と効き目が強そうなのは Unidirectional だと感じました。
今は手元は数万件オーダーの試験データしかなく、実測値のよいサンプルがないのですが、Unidirectional がデフォルト(False)の場合は dbExpress に比べてパフォーマンスが悪く、Unidirectional = True に設定すると dbExpress よりも良いパフォーマンスが出るように感じます。
これについては David Intersimone の下記記事も参考になると思います。
ただし、この方法が有効なのは、あくまでデータをコードで処理する場合です。でータセットを TDBGrid などで扱う用途向けではありません。