はじめに
検索画面でソート機能を実装する際、
comparebleインターフェースを使うか、SOQLでORDER BY句を使うか悩んだので、
見解をまとめます
結論
SOQLでできることはSOQLでやった方がいい
理由
Comparebleだと、CPU 時間制限に近づきやすくなるため
詳細説明
1. SOQLならばメモリ効率が最適化される
・ORDER BY を利用すると、データベース(DB側)で並び替えが完了した結果だけを受け取るため、Apex 側に載るメモリは「結果件数 × レコードサイズ」のみ
・必要なデータだけが Apex にロードされ、メモリ使用量を最小限に抑えられる
2. Comparable を使うと、Apex に余計な負荷がかかる
・Comparable を使う場合、一度 SOQL で取得したデータ全体を Apex 側に保持し、その上で並べ替え処理を行う必要がある
・Apex に処理を移す分、処理負荷(CPU時間)が余計に発生する
3. 件数が少なければ差はほとんどないのも事実
ヒープメモリはどちらも変わりないが、
Comparebleではapex側でソート処理をするため、
レコード数が増えるとCPU 時間制限に引っ掛かりやすくなる。
おわりに
Comparebleを初めて見たので、かっこいいし使った方がいいのかなと思いましたが、
DB側でできることはやるべき が大前提のようです。
参考