Допустим, у нас есть запрос

SELECT Name
FROM Account
WHERE Id NOT IN (SELECT Id FROM Settings__c WHERE Group__c = 'Test')

Я знаю об ограничении 20K, но вопрос в том, каков предел для этого запроса? Сколько записей мы можем получить, не достигая пределов?

-4
pincet 11 Июн 2021 в 13:42

3 ответа

Лучший ответ

Оба ответа, опубликованные в настоящее время, неверны. Нет ограничений на количество записей, выбранных подзапросом антиобъединения. Из Справочник по SOQL и SOSL:

Количество записей, совпадающих в подзапросе, не ограничено [обратите внимание, что речь идет конкретно о полуобъединении или антиобъединении]. Стандартные ограничения запросов SOQL применяются к основному запросу.

Таким образом, этот запрос подвергается обычному ограничению в 50 000 строк в запросе main, но подзапрос антиобъединения не влияет на ограничение строк.


Однако... подзапрос ничего не делает, как написано, потому что типы полей Id не совпадают. Идентификатор учетной записи никогда не равен идентификатору какого-либо другого объекта.

Скорее всего это опечатка для поиска Аккаунта в объекте Настройки или некорректная анонимизация этого кода.

4
David Reed 12 Июн 2021 в 00:32

Это пределы: https://developer.salesforce.com/ docs/atlas.en-us.salesforce_app_limits_cheatsheet.meta/salesforce_app_limits_cheatsheet/salesforce_app_limits_platform_apexgov.htm

Я ничего не знаю о 20 000, но согласно официальной документации вы можете получить 50 000 записей с помощью запроса SOQL.

0
Alex 11 Июн 2021 в 14:23
Меня беспокоит пункт IN
 – 
pincet
11 Июн 2021 в 14:26
Это то же самое. У вас есть 2 запроса, каждый из которых вернет максимум 50 000. Таким образом, предложение IN (второй запрос) будет извлекать максимум 50 000, а первый запрос будет иметь вывод максимум 50 000 (WHERE Id NOT IN 50 000 записей)
 – 
Alex
11 Июн 2021 в 15:24
Это не точно. Ограничения не добавляются к этим запросам.
 – 
David Reed
12 Июн 2021 в 00:33

Ограничение составляет 50 тыс. записей (кроме атрибута только для чтения). Только записи, полученные по основному запросу, имеют ограничение в 50 000 записей. Если вы превысите этот лимит, вы получите LimitException.

В запросе SOQL с подзапросами отношения родитель-потомок каждое отношение родитель-потомок считается дополнительным запросом. Эти типы запросов имеют ограничение в три раза по сравнению с запросами верхнего уровня. Количество строк из этих запросов взаимосвязи влияет на количество строк общего выполнения кода.

Ограничение в 20 КБ — это ограничение на количество символов для всего оператора SOQL. Сейчас он увеличен в 5 раз до 100 тысяч символов. Это ограничение не распространяется на подзапросы или переменные связывания.

См. это для более подробной информации.

0
manjit5190 12 Июн 2021 в 13:13
Это ограничение не применяется — это не родительский дочерний подзапрос.
 – 
David Reed
12 Июн 2021 в 00:32
Спасибо @DavidReed за исправление.
 – 
manjit5190
12 Июн 2021 в 13:13