- スキニーテーブルの概要
- スキニーテーブルでパフォーマンスが改善される理由
- スキニーテーブルの注意事項
オブジェクトのレコード数が数百万件レベルになってくると、標準のリストビューやレポート、クエリで検索結果が表示されるスピードが遅くなったりしますよね。
今回はそんな時にパフォーマンスを改善する方法の一つとして使用可能なスキニーテーブルという機能について紹介します。
検索結果表示待ちのイライラから解放されましょう!
スキニーテーブルの概要
スキニーテーブルは、普段利用しているオブジェクトのデータベースとは別にプラットフォーム内に作成されるテーブルです。
スキニーテーブルは通常のユーザからは見えない場所に存在しており、ユーザ自身でテーブル定義を修正したり、レコードに直接アクセスすることはできません。
スキニーテーブルを有効化することで、レポート、リストビュー、SOQLの性能を向上させることができます。
スキニーテーブルでパフォーマンスが向上する理由
スキニーテーブルでパフォーマンスが向上する理由について解説します。
Salesforceのテーブル構造
まず初めにSalesforceのテーブルの構造についてお話しします。
実はSalesforceを利用している組織のすべてのデータは、上記のように単一のテーブルで保持されており、組織IDでパーティションされています。
さらに標準オブジェクトの場合、標準項目とカスタム項目は次のように別々のテーブルに格納されています。
標準項目とカスタム項目の両方が表示されるリストビューやレポート、クエリでは2つのテーブルのジョインが発生します。
普通にSalesforce使っている分には全然わからないですよね。
スキニーテーブルの構造
Salesforce内部のDB構造を踏まえたうえで、スキニーテーブルの構造について説明します。
スキニーテーブルは通常のテーブル構造では分かれている標準オブジェクトの標準項目とカスタム項目のテーブルの情報を最初から1つのテーブルで保持します。
そのため、テーブルのジョインが発生しなくなり、クエリのパフォーマンスが向上します。
さらに、1つのスキニーテーブルには特定組織の特定オブジェクトのデータのみが保持されるため、テーブル内のレコード数が少なくなり、ストレージ効率が良くなります。
余計な情報を削ってシンプルな構造のテーブルを保持することで、パフォーマンスを向上しているってことですね!
スキニーテーブルの特徴
スキニーテーブルの特徴を説明します。
スキニーテーブルの作成方法
スキニーテーブルはSalesforceの設定画面から作成することは出来ず、Salesforceのサポートに依頼する必要があります。
また、スキニーテーブルの項目追加などが必要な場合も自分で設定を変更することは出来ないので、サポートへの依頼が必要です。
ユーザからはスキニーテーブルの存在自体も確認することは出来ないので、何をするにもサポートへの依頼が必要です。
スキニーテーブルが使用されるかどうかは自動で決定される
リストビューやレポート、クエリ時にスキニーテーブルにアクセスするかどうかはSalesforceのクエリーオプティマイザーが決定します。
そのため、ユーザの画面上では通常orスキニーテーブルのどちらにアクセスしているのかはわかりません。
スキニーテーブルで使用できるデータ型
スキニーテーブルには特定のデータがの項目のみを含めることができます。
- チェックボックス
- 日付
- 日付と時刻
- メール
- 数値
- パーセント
- 電話
- 選択リスト
- 複数選択リスト
- テキスト
- テキストエリア
- ロングテキストエリア
- URL
参照関係、主従関係項目のような参照先のテーブルの値の取得が必要になる項目は使用できません。
また、数式のようにクエリの際に再計算が必要になる項目も使用できません。
Sandboxへのコピー
スキニーテーブルはFull Sandboxリフレッシュ時にコピーされますが、そのほかの種類のSandboxにはコピーされません。
Full Sandbox以外のSandboxでスキニーテーブルを使用するには、本番環境とは別にSalesforceサポートに依頼する必要があります。
まとめ
スキニーテーブルはSalesforceの設定画面からは作成できず、ユーザの目には見えないので正しく動作しているかどうかの確認も難しい機能です。
ですが、大量データのパフォーマンス改善はSalesforce界隈にいるうちは避けては通れない課題なので、こういう方法があるということだけでも覚えておくと良いでしょう。