Salesforceでのインデックスの作成方法

技術コラム

Hidenobu Kojima

Salesforceでのインデックス
の作成方法

Hidenobu Kojima

いつもご愛読いただきありがとうございます。

今回は、Salesforceでのインデックスの作成方法について、ご説明させていただきます。

Salesforceでのデータの検索方法には、以下の2種類がありますが、今回はSOQLが対象となります。

  • SOQL(Salesforce Object Query Language
    • SQLと同様の一般的な検索を行うクエリーです。
  • SOSL(Salesforce Object Search Language)
    • テキスト検索を行うためのクエリーです。

インデックスの目的

インデックスは、辞書の索引のようなものであり、その目的は、パフォーマンスの向上です。

インデックスを使用すると、データ量が増えても、すべてのデータを検索するわけではなく、インデックスによりデータを検索するため、パフォーマンスが劣化しません。

※インデックスの仕組みについては、本記事では説明を割愛させていただきます。

「システムの稼働当初は快適だったのに、データ量が増えるにつれて、だんだんと遅くなった。」というような問題は、インデックスを使用していないために発生する問題です。

パフォーマンスに問題がある場合は、インデックスの作成を検討してください。

インデックスは、条件に合わせて作成する必要があります。

今回は、以下の3パターンに分けて、ご説明させていただきます。

  • 1項目でのインデックス作成

例)会社名でリードを検索する場合

SELECT ID, Company, Name, Status
FROM Lead
WHERE Company = '○○○株式会社'
  • 2項目でのインデックス作成

例)会社名と名前でリードを検索する場合

SELECT ID, Company, Name, Status
FROM Lead
WHERE Company = '○○○株式会社'
AND Name = '△△△ △△△'
  • 3項目以上でのインデックス作成

例)会社名と名前、リード状況でリードを検索する場合

SELECT ID, Company, Name, Status
FROM Lead
WHERE Company = '○○○株式会社'
AND Name = '△△△ △△△'
AND Status ='新規'

ただし、インデックスは、いつでも使用されるわけではありません。

以下のような場合は、インデックスがあっても使用されません。

データが少ない場合

データ量が少ない場合は、すべてのデータを検索したほうが早いため、インデックスは使用されません。

検索した文字が絞り込めない場合

血液型で検索した場合、平均すると、検索結果は全体の25%になります。同様に、性別で検索すると、平均で、検索結果は全体の50%になります。このように検索結果を絞り込めない場合、インデックスは使用されません。

※標準インデックスの場合は15%未満、カスタムインデックスの場合は10%未満の場合に、インデックスが使用されます。

以下のような条件を指定している場合

  • NOT演算子
    • NOT演算子を使用した場合、インデックスは使用されません。
    • 例)Status != ‘新規’
  • NULL検索、または、空文字検索
    • 例)Company = NULL
  • LIKE検索で、前方一致でない場合
    • 例)Company LIKE ’%有限会社%’

1項目でのインデックス作成

1項目でのインデックスには、以下の2種類があります。

標準インデックス

標準インデックスを手動で作成したい場合は、「ユニーク」または「外部ID」を設定してください。

  • データ型により自動で作成されるインデックス
    • ・レコードタイプ
    • ・Name
    • ・参照関係
    • ・主従関係
  • 項目の設定により自動で作成されるインデックス
    • ・ユニーク
    • ・外部ID

※ユニークや外部IDを設定できないデータ型には、インデックスを作成することはできません。

カスタムインデックス

Salesforceのサポートに依頼して、作成していただくインデックスです。

Salesforceのサポートにインデックスの作成を依頼してください。

※カスタムインデックスは、効果があると判断された場合のみ、作成していただけますので、必ず作成されるわけではありません。

  • Salesforceのサポートに作成を依頼するインデックス
  • 数式
  • インデックスを作成するオブジェクト以外のオブジェクトを参照していない
  • 関数等により、値が自動で変わらない(Today()やNow()等を使用していない)

Salesforceのサポートに依頼する場合は、以下を参考にしてください。

[SOQL] カスタムインデックスが必要な場合の依頼方法について

2項目でのインデックス作成

2項目でのインデックス作成は、サポートに依頼する必要があります。

Salesforceのサポートに、インデックスの作成を依頼してください。

2項目でのインデックスを作成する場合は、項目の順序が大切です。

最初の項目での検索時にもインデックスが使用されるためです。

リードに、「会社名」と「リード状況」の順でインデックスを作成した場合

  • 会社名でリードを検索する場合:インデックスは使用される
  • リード状況でリードを検索する場合:インデックスは使用されない
  • 会社名とリード状況でリードを検索する場合:インデックスは使用される

リードに、「リード状況」と「会社名」の順でインデックスを作成した場合

  • 会社名でリードを検索する場合:インデックスは使用されない
  • リード状況でリードを検索する場合:インデックスは使用される
  • 会社名とリード状況でリードを検索する場合:インデックスは使用される

したがって、2項目でのインデックスを作成する場合は、項目の順序にも気を付けてください。

3項目でのインデックス作成

Salesforceで作成可能なインデックスの項目は、2項目までです。

したがって、3項目以上のインデックスを作成したい場合は、カスタムで作成するしかありません。

以下の手順で、カスタムインデックスを作成してください。

3項目を連結した項目(数式)を作成

項目を連結する場合は、項目の間に連結文字を入れるようにしてください。

例)検索キー(Key)=会社名(Company)+”_”+名前(Name)+”_”+リード状況(Status)

SOQLを修正
修正前)

SELECT ID, Company, Name, Status
FROM Lead
WHERE Company = '○○○株式会社'
AND Name = '△△△ △△△'
AND Status = '新規'


修正後)

SELECT ID, Company, Name, Status
FROM Lead
WHERE Key = '○○○株式会社_△△△ △△△_新規'

Salesforceのサポートにインデックスの作成を依頼

最後に

本記事では、 Salesforceでのインデックス作成についてご紹介させていただきました。

サンブリッジでは、構築から運用・保守、技術支援サービスまで、さまざまなサービスを提供しています。

「既存の環境を改修したいが対応できる人がいない」「もっとSalesforceを活用したいがどの機能から手を付けてよいかわからない」などお困りの際は、ぜひ、サンブリッジにご相談ください!

最後までお読みいただきありがとうございました。

Salesforce導入・活用支援のご案内

サンブリッジが提供するSalesforce導入・活用支援サービスは、お客様の現状の業務用件や目指すゴールをヒアリングし、システム設計から実装までを行います。
導入後のトレーニングまでを含むきめ細やかなサービスを一貫して実施することにより、Salesforceの活用向上と導入の効果を最大化します。

関連記事