Salesforce インデックス について

#1.インデックスの種類
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332907/887508ec-c2da-dc2d-ccf6-f69b80e81b45.png)
#2.標準インデックス項目
**Salesforce から自動的に作成される**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332907/e03afc57-2ee8-b33e-4102-e06b05272704.png)
#3.カスタムインデックスの２つ作成方法
**①項目を「外部ID」または「ユニーク」として定義**
外部ID項目とユニーク項目には自動的にカスタムインデックスが作成される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332907/3965efc1-c254-f855-8c13-f7017ab3d196.png)
**②Salesforce カスタマーサポート**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332907/a22aa4af-47a2-6256-9c30-71235080ea85.png)
※詳細は　[ここ](https://help.salesforce.com/articleView?id=000193930&language=ja&type=1)　までご参照ください。

#4.非決定性数式項目について
時間の経過に伴って値が変化したり、トランザクションにより関連エンティティが更新されたときに値が変更されること

- 直接、間接に他オブジェクトの項目
- 常に同じ値を返すとは限らない関数 (TODAY や NOW など)
- 所有者、自動採番、ディビジョン、監査項目 (CreatedDate および CreatedByID 項目は除く)
- インデックス付けできない項目(複数選択リストなど)
- 特殊な機能を持つ標準項目

 - 商談: Amount、TotalOpportunityQuantity、ExpectedRevenue、IsClosed、IsWon
 - ケース: ClosedDate、IsClosed
 - 商品: ProductFamily、IsActive、IsArchived
 - ソリューション: Status
 - リード: Status
 - 活動: Subject、TaskStatus、TaskPriority

#5. 2 列カスタムインデックス
**2 列のカスタムインデックスは、Salesforce プラットフォームの特殊機能です。**
**インデックスは単一の項目だけでなく、2つの項目の組合せに対しても作成することができる。**

**適用パータンは下記の通りです。**

- 1つ目の項目で絞り込み(WHERE句)、2つ目の項目でソート(ORDER BY)する
- 先頭項目のみの単一項目インデックスとしても利用できる 
- Field1__c(選択リスト)とField2__c(数値)の2カラムカスタムインデックス が有効な例
 - SELECT … FROM MyObject__c WHERE Field1__c IN (‘Foo’, ‘Baa’) AND Field2__c > 0 
 - SELECT … FROM MyObject__c WHERE Field1__c IN (‘Foo’, ‘Baa’) ORDER BY Field2__c 
 - SELECT … FROM MyObject__c WHERE Field1__c = ‘Foo’
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332907/89c7d387-c5f5-b482-379e-4f73e10ce99e.png)

#6.インデックスが使用されない条件
- 照会された値がシステム定義のしきい値を超える
- 検索条件の演算子が、NOT EQUAL TO (または !=)、NOT CONTAINS、NOT STARTS WITH などの否定演算子である
 - 『一致しない』は全件検索をしないとわかりません。可能であれば存在するもののような逆の記述に変えましょう。
- 部分一致でスキャンされる行数がしきい値を超える
- 数値、日付、日付/時間以外の項目での範囲検索や大小比較
- 空の値と比較している場合 (Name != '')
 - 基本的にはNull検索はインデックスを使いませんが、カスタムインデックス はSFDCサポートに依頼すればNullをインデックスに含めることは可能にな ります。その場合はNullもインデックス検索で使用出来ます。

#7.しきい値の算出
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332907/e10cec38-a062-53af-2ac4-654d6e60f2ee.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332907/0beeb652-012d-e1b1-7ba5-72236b143276.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332907/63f893c6-eb14-afa9-2808-32f33594b4cf.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332907/67c2e871-cc86-fff0-07f1-6cc073ec3228.png)
#8.インデックスが使われているかを確認する方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332907/62cd8a07-705f-fc09-b410-c2d9c21af189.png)

#9.Resources
- [大量のデータを使用するリリースのベストプラクティス](https://developer.salesforce.com/docs/atlas.ja-jp.220.0.salesforce_large_data_volumes_bp.meta/salesforce_large_data_volumes_bp/ldv_deployments_infrastructure_indexes.htm)
- [salesforce_query_search_optimization_developer_cheatsheet.pdf](http://resources.docs.salesforce.com/rel1/doc/en-us/static/pdf/salesforce_query_search_optimization_developer_cheatsheet.pdf)
- [非常に大きい SOQL クエリの処理](https://developer.salesforce.com/docs/atlas.ja-jp.218.0.apexcode.meta/apexcode/langCon_apex_SOQL_VLSQ.htm)
- [SOQL クエリの処理速度への考慮事項について??](https://help.salesforce.com/articleView?id=000336897&language=ja&type=1)