이 문서에서는 Salesforce SOQL Query Optimizer 가 어떻게 작동하는지를 높은 수준에서 설명하기 위해 노력하고 있으나, 추가적인 성능 향상에 대응하기 위해 Query Optimizer 의 동작은 예고 없이 변경될 수 있습니다. 개발자는 영향을 받는 SOQL 쿼리에 대한 쿼리 플랜이 생성되는 시점에 Query Optimizer 가 제공하는 정보를 토대로 비선택적 쿼리를 조정할 수 있도록 쿼리 플랜 보기('14년 여름부터 사용 가능)을 사용하는 것이 좋습니다.
또한 색인이 DML에 비용을 추가하고(거나) 때로는 색인에 따라 Query Optimizer가 다르게 동작해야 하므로 성능에 영향을 미칠 수도 있습니다.
쿼리 필터 중 하나가 색인된 필드에 대한 것이고, 해당 필터로 인해 결과 행 수가 시스템에서 정의한 임계값 아래로 줄어들면 선택적인 쿼리입니다. WHERE 절에 사용된 두 개 이상의 필터가 언급된 조건을 충족하면 SOQL 쿼리 성능이 개선됩니다.
선택적 SOQL 이 되기 위한 임계값은 첫 백만건의 레코드에 대해서는 레코드 수의 10%, 첫 백만 레코드 이후는 레코드 수의 5% 이며, 최대 333,000 건의 레코드까지가 대상입니다.
일부 경우에는, 예를 들어 쿼리 필터에서 사용되는 필드가 색인된 표준 필드일 경우, 선택적 SOQL 이 되기 위한 임계값은 더 높을 수 있습니다.
또한 이 선택적 SOQL 이 되기 위한 임계값은 향후 변경될 수 있습니다.
다음 필드는 기본적으로 색인화됩니다.
지원 사례를 작성할 때 WHERE 절의 필터에 색인화할 필드가 있는 SOQL 쿼리를 사례에 포함해주셔야 합니다.
또한 WHERE 절 필터의 값에 변수를 설정하여 동적으로 변경되는 경우, 고정된 특정 값으로 지정하여 주시길 바랍니다.
지원 사례를 만들기 전에 SOQL 쿼리를 선택적 쿼리로 만들기의 체크리스트를 살펴보십시오.
SOQL 쿼리를 선택적 쿼리로 만드는 방법을 참조하고 개발자 콘솔에서 쿼리 플랜 분석을 쿼리 플랜 도구에 언급된 대로 수행하여 색인 가능한 필드를 확인할 수도 있습니다.
발생 빈도가 가장 낮은 확인란 필드 값의 사용자 지정 색인이 성능에 가장 유리하고, 일반적으로 선택적 쿼리임을 나타냅니다.
다음 필드 유형에는 사용자 지정 색인을 만들 수 없습니다.
참고: 일반적으로 복잡한 새로운 데이터 유형이 Salesforce에 추가될 수 있고, 이런 유형의 필드에는 사용자 지정 색인이 허용되지 않을 수 있습니다.
사용자 지정 색인은 일반적으로 다음과 같은 경우에 사용되지 않습니다.
참고: 사용자 지정 색인이 사용되지 않는 다른 복잡한 시나리오가 더 있습니다. 시나리오가 이런 사례로 지원되지 않거나 비선택적 쿼리에 대한 도움이 더 필요한 경우 Salesforce 담당자에게 문의하십시오.
큰 개체에 대한 쿼리가 선택적인지에 대한 이해를 높이기 위해, 몇 가지 쿼리를 분석해 보겠습니다. 이런 쿼리에 대해, 여기서는 계정 sObject에 대한 레코드(아직 휴지통에 있는 삭제된 레코드인 일시 삭제된 레코드 포함)가 200,000개보다 많다고 가정합니다.
SELECT Id FROM Account WHERE Id IN (<list of account IDs>)
WHERE 절은 색인된 필드(Id)에 있습니다. SELECT COUNT() FROM Account WHERE Id IN (<list of account IDs>)에서 선택력 임계값보다 적은 수의 레코드를 반환하는 경우 Id의 색인이 사용됩니다. ID 목록에는 소량의 레코드만 포함되므로, 이런 경우가 일반적입니다.
SELECT Id FROM Account WHERE Name != ''
Name이 색인되어도(기본 키) Account는 큰 개체이므로, 이 필터는 대부분의 레코드를 반환하여 쿼리가 비선택적 쿼리가 됩니다.
SELECT Id FROM Account WHERE Name != '' AND CustomField__c = 'ValueA'
여기서는 각 필터가 개별적으로 고려되는 경우 선택적인지 확인해야 합니다. 이전 예에서 본 것처럼 첫 번째 필터는 선택적이지 않습니다. 따라서 두 번째 필터에 초점을 맞추겠습니다. SELECT COUNT() FROM Account WHERE CustomField__c = 'ValueA'에서 반환하는 레코드 수가 선택력 임계값보다 적고 CustomField__c가 색인된 경우, 쿼리는 선택적입니다.
SELECT Id FROM Account WHERE FormulaField__c = 'ValueA'공식 필드를 색인하기 위해서는 다음 규칙이 참이어야 합니다.
참고: SOQL 쿼리의 성능을 Salesforce 지원 팀에서 분석하고, 기준에 합격하면 색인이 수행됩니다.
000385213

We use three kinds of cookies on our websites: required, functional, and advertising. You can choose whether functional and advertising cookies apply. Click on the different cookie categories to find out more about each category and to change the default settings.
Privacy Statement
Required cookies are necessary for basic website functionality. Some examples include: session cookies needed to transmit the website, authentication cookies, and security cookies.
Functional cookies enhance functions, performance, and services on the website. Some examples include: cookies used to analyze site traffic, cookies used for market research, and cookies used to display advertising that is not directed to a particular individual.
Advertising cookies track activity across websites in order to understand a viewer’s interests, and direct them specific marketing. Some examples include: cookies used for remarketing, or interest-based advertising.