Developer

SOQLの発行はどれがカウントされるのか試してみました【セールスフォース】

Developer
この記事は約2分で読めます。

こんにちは、アンダーソンです。
今回SOQLの発行カウントの条件について少し気になることがあったので調べてみました。

スポンサーリンク

ガバナ制限におけるSOQL

まずおさらいしておきましょう。
1トランザクションでのSOQLの呼び出しは100回です。
それを超えると下記のようなエラーが出ますね。

System.LimitException: Too many SOQL queries: 101

さて今回試したいのは、SOQLはSOQLでもサブクエリだったり、WHERE句内で使うSOQL、forループで直接使うSOQL
と様々あるけど全てカウントされるのかを確認したいということです。

では早速みていきます。

SOQL

まず普通に発行します。

system.debug([SELECT Id FROM Account]);

system.debug(limits.getQueries());

この結果は当然1です。

サブクエリ

次はサブクエリを追加します。

system.debug([SELECT Id,(SELECT Id FROM Contacts) FROM Account]);

system.debug(limits.getQueries());

どうせ2なんだろ。。。って思ってたら違いました。
まさかの1でした。

Where句内

次はWhere句内での条件に使うSOQLを発行します。

system.debug([SELECT Id FROM Account Where Id IN (SELECT AccountId FROM Contact WHERE AccountId != null)]);

system.debug(limits.getQueries());

またまたどうせ2なんだろ。。。って思ってたら
まさかまさかのこれも1でした。

SOQL for ループ

なんとなく結果はわかってますよ。でもやってみます。

for ( Account acc : [SELECT Id FROM Account LIMIT 100] ) {
    system.debug(acc);
}

system.debug(limits.getQueries());

これはもしや0とかあんじゃね?って思いましたが
はい1です。

まとめ

びっくりするくらい簡単な実験でしたが、サブクエリやWhere句でのSOQLをうまく使えば
クエリの発行数を抑えることができそうですね。
このようなことも頭に入れて実装していきたいですね。

その他の開発に関する記事はこちらです。

Developerも含めた試験問題にチャレンジしてみましょう。

コメント