Quip終了に伴うデータエクスポートでお困りの方へ

Salesforceのインデックス作成方法|SOQLの検索改善に

Salesforceの運用を続ける中で、「昔よりSOQLの検索レスポンスが遅くなった」「データ量が増えてパフォーマンスが低下している」とお悩みではありませんか?

大量のデータから目的のレコードを高速に検索するには、「インデックス(索引)」の作成が非常に有効です。しかし、Salesforceのインデックスは作成すれば必ず適用されるわけではなく、検索条件(SOQLの書き方)や項目の設定方法を正しく理解しておく必要があります。

本記事では、Salesforceにおけるインデックスの作成方法を「1項目」「2項目」「3項目以上」のパターン別にわかりやすく解説します。また、インデックスが適用されない・効かない落とし穴についても紹介しますので、パフォーマンスチューニングにぜひお役立てください。

目次

インデックスの目的

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

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

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

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

パフォーマンスに問題がある場合は、インデックスの作成を検討してください。インデックスは、条件に合わせて作成する必要があります。

今回は、以下の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の定着から使い方のレクチャーを含めた伴走支援など、導入後につまづきがちなポイントを押さえてご支援します。

サービス・ソリューションに関するお問い合わせ

Salesforce・AWSなど、ご支援に関してご不明な点やご相談はこちらからお問い合わせください。

貴社のビジネス課題を発見し、解決にむけてコンサルタントがご提案いたします。

この記事を書いた人

2012年4月より、Salesforceの導入に従事し、保険業界・製薬業界・不動産・教育関連・官公庁等幅広い業界の導入を経験。
過去の経験を活かし、幅広い情報を発信していきます。

<保有資格>
認定Platformデベロッパー
認定Sales Cloudコンサルタント
認定Service Cloudコンサルタント
認定Data Cloudコンサルタント

目次