SlideShare a Scribd company logo
Copyright © TerraSky Co., Ltd. All Rights Reserved. 1
TerraSky Power Night
2017年11月29日
株式会社テラスカイ
ソリューション本部
吉清 隆之
SOQL Performance Explained
自己紹介
2Copyright © TerraSky Co., Ltd. All Rights Reserved.
吉清 隆之
2017年1月 テラスカイ入社(そろそろ満1年)
ソリューション本部第1ソリューション部 部長
主に大型案件をやってます。
PM歴はうん十年、Salesforceは2011年から携わってます。
職歴
日本電気ソフトウェア(現NECソリューションイノベーター)
日本オラクル
NTTデータ
セールスフォース・ドットコム 等々
資格
Salesforce: Sales Cloud,Service Cloud,上級アドミン
その他いっぱい(笑)
1. はじめに
Salesforceはパフォーマンスチューニングが出来ないのでしょうか。
そんなことはありません。一般的なDBよりはチューニング余地が少ないですが、イン
デックスを検討することで性能改善させることはできます。
是非、設計段階からパフォーマンスを意識した設計をしていきましょう。
また、SOQLが効率化されているかを確認することが出来ます。そのやり方も覚えま
しょう。
3Copyright © TerraSky Co., Ltd. All Rights Reserved.
SlowなSOQL
を改善しよう
4
2.インデックス比較
Copyright © 2016 Terrasky Co., Ltd. All Rights Reserved.
標準インデックス カスタムインデックス
項目
Id, Name, OwnerId, RecordTypeId,
Audit dates(SystemModStamp など),
Division,Email (取引先責任者とリード)
参照関係項目と主従関係項目
とドキュメントには記載されてます・・
外部ID,ユニーク項目(管理者設定可)
標準インデックス対象外の任意の項目
(複数選択リスト, ロングテキストエリア,
リッチテキストエリア, 暗号化テキスト,
非決定性の数式ι¹には設定不可 )
選択的
条件を満たすレコード全体のうち以下の
しきい値以下の場合
• 最初の100万件までは30%
• 100万件を超える分の15%
• 最大で100万件
例)
300万件:30万+30万=60万
560万件:30万+70万=99万
条件を満たすレコード全体のうち以下の
しきい値以下の場合
• 最初の100万件までは10%
• 100万件を超える分の5%
• 最大で333,333件
例)
300万件:10万+10万=20万
560万件:10万+23万=33万
非決定性数式¹
• 直接、間接に他オブジェクトの項目を参照している
• 常に同じ値を返すとは限らない関数 (TODAY や NOW など) を使用している
• 所有者、自動採番、ディビジョン、監査項目 (CreatedDateとCreatedByID以外)を参照している
• インデックス付けできない項目(複数選択リストなど)を参照している
• マルチ通貨組織における通貨項目を使用している
• 特殊な機能を持つ以下の標準項目を参照している
3. 抽出条件式 (where句) ①
• AND
• インデックス化項目に対する2つ以上の条件がAND結合されている
• 各インデックスを2倍のしきい値で選択性の高低判定
• 選択性の高い全てのインデックスの「積」を満たすレコード数がしきい値以
下なら、それら全てのインデックスが使用される
• 全てが標準インデックスなら、標準インデックスのしきい値
• 1つでもカスタムインデックスが含まれるなら、カスタムインデックスのし
きい値
• インデックスのいずれかから返されるレコード数が、オブジェクトのレコー
ド数の 20 % または合計レコード数 666,666 を超えない限り、インデッ
クスが使用される。
Copyright © TerraSky Co., Ltd. All Rights Reserved. 5
4. 抽出条件式 (where句) ②
• OR
• インデックス化項目に対する2つ以上の条件がOR結合されている
• 全ての条件項目に選択性が高いインデックスが存在し、かつ、各条件を満た
すレコードの「和」がしきい値以下なら、それら全てのインデックスが使用
される
• 全てが標準インデックスなら、標準インデックスのしきい値
• 1つでもカスタムインデックスが含まれるなら、カスタムインデックスのし
きい値
• すべてのインデックスから返されるレコード数が、オブジェクトのレコード
数の 10 % または合計レコード数 333,333 を超えない限り、インデック
スが使用される。
• LIKE
• Force.com クエリオプティマイザでは内部統計情報テーブルは使用されま
せん。代わりに、最大で 100,000 件の実際のデータのレコードを抽出し、
カスタムインデックスを使用するかどうかが決定されます。
Copyright © TerraSky Co., Ltd. All Rights Reserved. 6
5. インデックスが使われないケース
• 比較方法が一致しない「!=」「NOT IN」
• 『一致しない』は全件検索をしないとわかりません。可能であれば存在する
もののような逆の記述に変えましょう。
• 後方一致、中間一致 Like %_(ワイルドカード)
• 中間一致: 「次の文字列を含む」, Text__c LIKE ‘%Foo%’
後方一致: Text__c LIKE ‘%Foo’
SOSLでの検索を検討してみてください。
• 数値、日付、日付/時間以外の項目での範囲検索や大小比較
• Nullの検索
• 基本的にはNull検索はインデックスを使いませんが、カスタムインデックス
はSFDCサポートに依頼すればNullをインデックスに含めることは可能にな
ります。その場合はNullもインデックス検索で使用出来ます。
Copyright © TerraSky Co., Ltd. All Rights Reserved. 7
6. Think of what to do next
• 2列カスタムインデックス
• 2つの項目を複合してインデックスに出来る。例えば住所のように1つ目を都道府県、
2つ目を市区町村のように作成できる。2つ目の項目はNullでも可。項目個別にイン
デックスを作るより効果が高い。
• スキニーテーブル
• 特定オブジェクトの一部の項目のみでコンパクトに構成されたオブジェクト
• 主に大量のレコードを含むオブジェクトに対するクエリー(レポート、リストビュー、
SOQL)の性能を向上させるために利用される
• 対象オブジェクトの持つ項目のうち、100項目までをスキニーテーブルに含められる
• 組織のデータストレージの対象としてカウントされません。
• ディビジョン
• データを論理セクションへ分割する。
• ひとつのオブジェクトに 100 万を超えるレコードがある場合、および、35 を超える
ライセンスがある場合に有効化できる。
Copyright © TerraSky Co., Ltd. All Rights Reserved. 8
7. 実装にあたって
• 効率的なインデックスの机上検討
• オブジェクトのレコード数、項目のカーディナリティ検索条件、選択されるレ
コード数の想定をしてインデックスの利用を机上検討
• 検証
• SOQLを作成し、統計情報を取って効果的かを確認。
• 更なる検討
• 統計情報の結果から、再度検討そして検証の繰り返し。
2列インデックスやディビジョン、スキニーテーブルも検討してみましょう。
• デメリットの理解
• インデックスは別オブジェクトとして作成されます。そのためインデックスが
多いと更新処理のパフォーマンスが劣化します。
Copyright © TerraSky Co., Ltd. All Rights Reserved. 9
8. インデックスが使われているかを確認する方法
Copyright © TerraSky Co., Ltd. All Rights Reserved. 10
• 開発者コンソールでQuery Planを取得しましょう。
• インデックスがある場合は2行以上結果が表示されます。
• SalesforceはCostが低いものを選択します。Costは1以下を目標としましょう。
• Cardinalityは選択対象の件数です。先に説明したインデックスのしきい値がこち
らに該当しますので注意しましょう。
詳しくはTerrasky TechBlogで!
8. インデックスが使われているかを確認する方法
Copyright © TerraSky Co., Ltd. All Rights Reserved. 11
• 開発者コンソールでQuery Planを取得しましょう。
• インデックスがある場合は2行以上結果が表示されます。
• SalesforceはCostが低いものを選択します。Costは1以下を目標としましょう。
• Cardinalityは選択対象の件数です。先に説明したインデックスのしきい値がこち
らに該当しますので注意しましょう。
詳しくはTerrasky TechBlogで!
9. おまけ
SOSL
SOSLで、リストビュー内の検索が新しくサポートされるようになりました。
リストビュー内の検索
USING ListView を使用すると、オブジェクトのリストビューを検索でき、大きなリ
ストビューから 1 件のレコードを容易に探すことができます。
次の SOSL ステートメントは MVP Customers リストビューで Acme の Account
オブジェクトを検索しています。
FIND {Acme} IN ALL FIELDS RETURNING
Account(Id, Name USING ListView=MVPCustomers)
Copyright © TerraSky Co., Ltd. All Rights Reserved. 12
Copyright © TerraSky Co., Ltd. All Rights Reserved. 13

More Related Content

Similar to TerraSky PowerNight Soql performance explained

徳丸本ができるまで
徳丸本ができるまで徳丸本ができるまで
徳丸本ができるまでHiroshi Tokumaru
 
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
terurou
 
SQL on Hadoop 比較検証 【2014月11日における検証レポート】
SQL on Hadoop 比較検証 【2014月11日における検証レポート】SQL on Hadoop 比較検証 【2014月11日における検証レポート】
SQL on Hadoop 比較検証 【2014月11日における検証レポート】
NTT DATA OSS Professional Services
 
01 slack導入の提案
01 slack導入の提案01 slack導入の提案
01 slack導入の提案
ssuser68dea4
 
第6回rest勉強会 アソシエーション編
第6回rest勉強会 アソシエーション編第6回rest勉強会 アソシエーション編
第6回rest勉強会 アソシエーション編
ksimoji
 
BigDLでScala × DeepLearning に入門した話
BigDLでScala × DeepLearning に入門した話BigDLでScala × DeepLearning に入門した話
BigDLでScala × DeepLearning に入門した話
hirotakanosato
 
OSC関西@京都2014 CloudStackの歩き方
OSC関西@京都2014 CloudStackの歩き方OSC関西@京都2014 CloudStackの歩き方
OSC関西@京都2014 CloudStackの歩き方
Midori Oge
 
【12-A-2】 ケーススタディ:不景気と戦うシステムインテグレート
【12-A-2】 ケーススタディ:不景気と戦うシステムインテグレート【12-A-2】 ケーススタディ:不景気と戦うシステムインテグレート
【12-A-2】 ケーススタディ:不景気と戦うシステムインテグレートdevsumi2009
 
[D33] そのデータベース 5年後大丈夫ですか by Hiromu Goto
[D33] そのデータベース 5年後大丈夫ですか by Hiromu Goto[D33] そのデータベース 5年後大丈夫ですか by Hiromu Goto
[D33] そのデータベース 5年後大丈夫ですか by Hiromu GotoInsight Technology, Inc.
 
第一回ゆるふわーる
第一回ゆるふわーる第一回ゆるふわーる
第一回ゆるふわーる
Sachiko Hirata
 
自前言語を仕事に使う話
自前言語を仕事に使う話自前言語を仕事に使う話
自前言語を仕事に使う話
啓 小笠原
 
Interop2017
Interop2017Interop2017
Interop2017
tak9029
 
[db tech showcase Tokyo 2014] L34: そのデータベース 5年後大丈夫ですか by 日本ヒューレット・パッカード株式会社 後藤宏
[db tech showcase Tokyo 2014] L34: そのデータベース 5年後大丈夫ですか  by 日本ヒューレット・パッカード株式会社 後藤宏[db tech showcase Tokyo 2014] L34: そのデータベース 5年後大丈夫ですか  by 日本ヒューレット・パッカード株式会社 後藤宏
[db tech showcase Tokyo 2014] L34: そのデータベース 5年後大丈夫ですか by 日本ヒューレット・パッカード株式会社 後藤宏
Insight Technology, Inc.
 
企業等に蓄積されたデータを分析するための処理機能の提案
企業等に蓄積されたデータを分析するための処理機能の提案企業等に蓄積されたデータを分析するための処理機能の提案
企業等に蓄積されたデータを分析するための処理機能の提案
Toshiyuki Shimono
 
TwilioとLINEとSlackを繫いで、電話の伝言メッセージをLINEとSlackで確認する+音声認識+メール
TwilioとLINEとSlackを繫いで、電話の伝言メッセージをLINEとSlackで確認する+音声認識+メールTwilioとLINEとSlackを繫いで、電話の伝言メッセージをLINEとSlackで確認する+音声認識+メール
TwilioとLINEとSlackを繫いで、電話の伝言メッセージをLINEとSlackで確認する+音声認識+メール
Kazuki Saito
 
JPAのキャッシュを使ったアプリケーション高速化手法
JPAのキャッシュを使ったアプリケーション高速化手法JPAのキャッシュを使ったアプリケーション高速化手法
JPAのキャッシュを使ったアプリケーション高速化手法
Chihiro Ito
 
世界征服を目指す Jubatus だからこそ期待する 5 つのポイント
世界征服を目指す Jubatus だからこそ期待する 5 つのポイント世界征服を目指す Jubatus だからこそ期待する 5 つのポイント
世界征服を目指す Jubatus だからこそ期待する 5 つのポイント
Toru Shimogaki
 
IaC化の3つのポイント
IaC化の3つのポイントIaC化の3つのポイント
IaC化の3つのポイント
山下 達也
 
Node-RED TIPS:functionノード間で関数を共有する方法
Node-RED TIPS:functionノード間で関数を共有する方法Node-RED TIPS:functionノード間で関数を共有する方法
Node-RED TIPS:functionノード間で関数を共有する方法
Kazuki Saito
 

Similar to TerraSky PowerNight Soql performance explained (20)

徳丸本ができるまで
徳丸本ができるまで徳丸本ができるまで
徳丸本ができるまで
 
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
 
SQL on Hadoop 比較検証 【2014月11日における検証レポート】
SQL on Hadoop 比較検証 【2014月11日における検証レポート】SQL on Hadoop 比較検証 【2014月11日における検証レポート】
SQL on Hadoop 比較検証 【2014月11日における検証レポート】
 
01 slack導入の提案
01 slack導入の提案01 slack導入の提案
01 slack導入の提案
 
全文検索入門
全文検索入門全文検索入門
全文検索入門
 
第6回rest勉強会 アソシエーション編
第6回rest勉強会 アソシエーション編第6回rest勉強会 アソシエーション編
第6回rest勉強会 アソシエーション編
 
BigDLでScala × DeepLearning に入門した話
BigDLでScala × DeepLearning に入門した話BigDLでScala × DeepLearning に入門した話
BigDLでScala × DeepLearning に入門した話
 
OSC関西@京都2014 CloudStackの歩き方
OSC関西@京都2014 CloudStackの歩き方OSC関西@京都2014 CloudStackの歩き方
OSC関西@京都2014 CloudStackの歩き方
 
【12-A-2】 ケーススタディ:不景気と戦うシステムインテグレート
【12-A-2】 ケーススタディ:不景気と戦うシステムインテグレート【12-A-2】 ケーススタディ:不景気と戦うシステムインテグレート
【12-A-2】 ケーススタディ:不景気と戦うシステムインテグレート
 
[D33] そのデータベース 5年後大丈夫ですか by Hiromu Goto
[D33] そのデータベース 5年後大丈夫ですか by Hiromu Goto[D33] そのデータベース 5年後大丈夫ですか by Hiromu Goto
[D33] そのデータベース 5年後大丈夫ですか by Hiromu Goto
 
第一回ゆるふわーる
第一回ゆるふわーる第一回ゆるふわーる
第一回ゆるふわーる
 
自前言語を仕事に使う話
自前言語を仕事に使う話自前言語を仕事に使う話
自前言語を仕事に使う話
 
Interop2017
Interop2017Interop2017
Interop2017
 
[db tech showcase Tokyo 2014] L34: そのデータベース 5年後大丈夫ですか by 日本ヒューレット・パッカード株式会社 後藤宏
[db tech showcase Tokyo 2014] L34: そのデータベース 5年後大丈夫ですか  by 日本ヒューレット・パッカード株式会社 後藤宏[db tech showcase Tokyo 2014] L34: そのデータベース 5年後大丈夫ですか  by 日本ヒューレット・パッカード株式会社 後藤宏
[db tech showcase Tokyo 2014] L34: そのデータベース 5年後大丈夫ですか by 日本ヒューレット・パッカード株式会社 後藤宏
 
企業等に蓄積されたデータを分析するための処理機能の提案
企業等に蓄積されたデータを分析するための処理機能の提案企業等に蓄積されたデータを分析するための処理機能の提案
企業等に蓄積されたデータを分析するための処理機能の提案
 
TwilioとLINEとSlackを繫いで、電話の伝言メッセージをLINEとSlackで確認する+音声認識+メール
TwilioとLINEとSlackを繫いで、電話の伝言メッセージをLINEとSlackで確認する+音声認識+メールTwilioとLINEとSlackを繫いで、電話の伝言メッセージをLINEとSlackで確認する+音声認識+メール
TwilioとLINEとSlackを繫いで、電話の伝言メッセージをLINEとSlackで確認する+音声認識+メール
 
JPAのキャッシュを使ったアプリケーション高速化手法
JPAのキャッシュを使ったアプリケーション高速化手法JPAのキャッシュを使ったアプリケーション高速化手法
JPAのキャッシュを使ったアプリケーション高速化手法
 
世界征服を目指す Jubatus だからこそ期待する 5 つのポイント
世界征服を目指す Jubatus だからこそ期待する 5 つのポイント世界征服を目指す Jubatus だからこそ期待する 5 つのポイント
世界征服を目指す Jubatus だからこそ期待する 5 つのポイント
 
IaC化の3つのポイント
IaC化の3つのポイントIaC化の3つのポイント
IaC化の3つのポイント
 
Node-RED TIPS:functionノード間で関数を共有する方法
Node-RED TIPS:functionノード間で関数を共有する方法Node-RED TIPS:functionノード間で関数を共有する方法
Node-RED TIPS:functionノード間で関数を共有する方法
 

More from TerraSky

TerraSky PowerNight - Salesforce is ready for ERP -
TerraSky PowerNight - Salesforce is ready for ERP -TerraSky PowerNight - Salesforce is ready for ERP -
TerraSky PowerNight - Salesforce is ready for ERP -
TerraSky
 
TerraSky PowerNight myEinstein
TerraSky PowerNight  myEinsteinTerraSky PowerNight  myEinstein
TerraSky PowerNight myEinstein
TerraSky
 
セールスフォース的開発メソッドのススメ 須山洋輔
セールスフォース的開発メソッドのススメ 須山洋輔セールスフォース的開発メソッドのススメ 須山洋輔
セールスフォース的開発メソッドのススメ 須山洋輔
TerraSky
 
Xivelyで楽々IoT 岩井哲郎
Xivelyで楽々IoT 岩井哲郎Xivelyで楽々IoT 岩井哲郎
Xivelyで楽々IoT 岩井哲郎
TerraSky
 
これだけは押さえておきたいDreamforceを楽しむための英語力 下川原章仁
これだけは押さえておきたいDreamforceを楽しむための英語力 下川原章仁これだけは押さえておきたいDreamforceを楽しむための英語力 下川原章仁
これだけは押さえておきたいDreamforceを楽しむための英語力 下川原章仁
TerraSky
 
Dreamforce2016から読み解く、これからのit 大友幹
Dreamforce2016から読み解く、これからのit 大友幹Dreamforce2016から読み解く、これからのit 大友幹
Dreamforce2016から読み解く、これからのit 大友幹
TerraSky
 
12 power night2014 miyanishi
12 power night2014 miyanishi12 power night2014 miyanishi
12 power night2014 miyanishiTerraSky
 
11 power nignt_furuta
11 power nignt_furuta11 power nignt_furuta
11 power nignt_furutaTerraSky
 
10 power night2014_uematsu
10 power night2014_uematsu10 power night2014_uematsu
10 power night2014_uematsuTerraSky
 
9 power night2014_iwai
9 power night2014_iwai9 power night2014_iwai
9 power night2014_iwaiTerraSky
 
8 power night2014_nakamura
8 power night2014_nakamura8 power night2014_nakamura
8 power night2014_nakamuraTerraSky
 
7 power night2014_kanbayashi
7 power night2014_kanbayashi7 power night2014_kanbayashi
7 power night2014_kanbayashiTerraSky
 
6 power night2014_sasaki
6 power night2014_sasaki6 power night2014_sasaki
6 power night2014_sasakiTerraSky
 
5 power night2014_totsuka
5 power night2014_totsuka5 power night2014_totsuka
5 power night2014_totsukaTerraSky
 
4 power night2014_yoshikawa
4 power night2014_yoshikawa4 power night2014_yoshikawa
4 power night2014_yoshikawaTerraSky
 
3 power nignt2014_yamamoto
3 power nignt2014_yamamoto3 power nignt2014_yamamoto
3 power nignt2014_yamamoto
TerraSky
 
2 power night2014_erp
2 power night2014_erp2 power night2014_erp
2 power night2014_erpTerraSky
 
1 power night2014_imaoka
1 power night2014_imaoka1 power night2014_imaoka
1 power night2014_imaokaTerraSky
 
13 power nignt2014_yanase
13 power nignt2014_yanase13 power nignt2014_yanase
13 power nignt2014_yanaseTerraSky
 
04 salesforceでのソフトフォン実装パターン
04 salesforceでのソフトフォン実装パターン04 salesforceでのソフトフォン実装パターン
04 salesforceでのソフトフォン実装パターン
TerraSky
 

More from TerraSky (20)

TerraSky PowerNight - Salesforce is ready for ERP -
TerraSky PowerNight - Salesforce is ready for ERP -TerraSky PowerNight - Salesforce is ready for ERP -
TerraSky PowerNight - Salesforce is ready for ERP -
 
TerraSky PowerNight myEinstein
TerraSky PowerNight  myEinsteinTerraSky PowerNight  myEinstein
TerraSky PowerNight myEinstein
 
セールスフォース的開発メソッドのススメ 須山洋輔
セールスフォース的開発メソッドのススメ 須山洋輔セールスフォース的開発メソッドのススメ 須山洋輔
セールスフォース的開発メソッドのススメ 須山洋輔
 
Xivelyで楽々IoT 岩井哲郎
Xivelyで楽々IoT 岩井哲郎Xivelyで楽々IoT 岩井哲郎
Xivelyで楽々IoT 岩井哲郎
 
これだけは押さえておきたいDreamforceを楽しむための英語力 下川原章仁
これだけは押さえておきたいDreamforceを楽しむための英語力 下川原章仁これだけは押さえておきたいDreamforceを楽しむための英語力 下川原章仁
これだけは押さえておきたいDreamforceを楽しむための英語力 下川原章仁
 
Dreamforce2016から読み解く、これからのit 大友幹
Dreamforce2016から読み解く、これからのit 大友幹Dreamforce2016から読み解く、これからのit 大友幹
Dreamforce2016から読み解く、これからのit 大友幹
 
12 power night2014 miyanishi
12 power night2014 miyanishi12 power night2014 miyanishi
12 power night2014 miyanishi
 
11 power nignt_furuta
11 power nignt_furuta11 power nignt_furuta
11 power nignt_furuta
 
10 power night2014_uematsu
10 power night2014_uematsu10 power night2014_uematsu
10 power night2014_uematsu
 
9 power night2014_iwai
9 power night2014_iwai9 power night2014_iwai
9 power night2014_iwai
 
8 power night2014_nakamura
8 power night2014_nakamura8 power night2014_nakamura
8 power night2014_nakamura
 
7 power night2014_kanbayashi
7 power night2014_kanbayashi7 power night2014_kanbayashi
7 power night2014_kanbayashi
 
6 power night2014_sasaki
6 power night2014_sasaki6 power night2014_sasaki
6 power night2014_sasaki
 
5 power night2014_totsuka
5 power night2014_totsuka5 power night2014_totsuka
5 power night2014_totsuka
 
4 power night2014_yoshikawa
4 power night2014_yoshikawa4 power night2014_yoshikawa
4 power night2014_yoshikawa
 
3 power nignt2014_yamamoto
3 power nignt2014_yamamoto3 power nignt2014_yamamoto
3 power nignt2014_yamamoto
 
2 power night2014_erp
2 power night2014_erp2 power night2014_erp
2 power night2014_erp
 
1 power night2014_imaoka
1 power night2014_imaoka1 power night2014_imaoka
1 power night2014_imaoka
 
13 power nignt2014_yanase
13 power nignt2014_yanase13 power nignt2014_yanase
13 power nignt2014_yanase
 
04 salesforceでのソフトフォン実装パターン
04 salesforceでのソフトフォン実装パターン04 salesforceでのソフトフォン実装パターン
04 salesforceでのソフトフォン実装パターン
 

Recently uploaded

アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
You&I
 
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdfCO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
yamamotominami
 
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
Solanaで始めるRustプログラミング - Superteam Japan Developer EventSolanaで始めるRustプログラミング - Superteam Japan Developer Event
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
K Kinzal
 
シグネチャで始めるRustプログラミング - Superteam Japan Developer Event
シグネチャで始めるRustプログラミング - Superteam Japan Developer Eventシグネチャで始めるRustプログラミング - Superteam Japan Developer Event
シグネチャで始めるRustプログラミング - Superteam Japan Developer Event
K Kinzal
 
NIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしようNIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしよう
You&I
 
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdfクラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
TatsuyaHanayama
 

Recently uploaded (6)

アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
 
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdfCO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
 
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
Solanaで始めるRustプログラミング - Superteam Japan Developer EventSolanaで始めるRustプログラミング - Superteam Japan Developer Event
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
 
シグネチャで始めるRustプログラミング - Superteam Japan Developer Event
シグネチャで始めるRustプログラミング - Superteam Japan Developer Eventシグネチャで始めるRustプログラミング - Superteam Japan Developer Event
シグネチャで始めるRustプログラミング - Superteam Japan Developer Event
 
NIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしようNIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしよう
 
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdfクラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
 

TerraSky PowerNight Soql performance explained

  • 1. Copyright © TerraSky Co., Ltd. All Rights Reserved. 1 TerraSky Power Night 2017年11月29日 株式会社テラスカイ ソリューション本部 吉清 隆之 SOQL Performance Explained
  • 2. 自己紹介 2Copyright © TerraSky Co., Ltd. All Rights Reserved. 吉清 隆之 2017年1月 テラスカイ入社(そろそろ満1年) ソリューション本部第1ソリューション部 部長 主に大型案件をやってます。 PM歴はうん十年、Salesforceは2011年から携わってます。 職歴 日本電気ソフトウェア(現NECソリューションイノベーター) 日本オラクル NTTデータ セールスフォース・ドットコム 等々 資格 Salesforce: Sales Cloud,Service Cloud,上級アドミン その他いっぱい(笑)
  • 4. 4 2.インデックス比較 Copyright © 2016 Terrasky Co., Ltd. All Rights Reserved. 標準インデックス カスタムインデックス 項目 Id, Name, OwnerId, RecordTypeId, Audit dates(SystemModStamp など), Division,Email (取引先責任者とリード) 参照関係項目と主従関係項目 とドキュメントには記載されてます・・ 外部ID,ユニーク項目(管理者設定可) 標準インデックス対象外の任意の項目 (複数選択リスト, ロングテキストエリア, リッチテキストエリア, 暗号化テキスト, 非決定性の数式ι¹には設定不可 ) 選択的 条件を満たすレコード全体のうち以下の しきい値以下の場合 • 最初の100万件までは30% • 100万件を超える分の15% • 最大で100万件 例) 300万件:30万+30万=60万 560万件:30万+70万=99万 条件を満たすレコード全体のうち以下の しきい値以下の場合 • 最初の100万件までは10% • 100万件を超える分の5% • 最大で333,333件 例) 300万件:10万+10万=20万 560万件:10万+23万=33万 非決定性数式¹ • 直接、間接に他オブジェクトの項目を参照している • 常に同じ値を返すとは限らない関数 (TODAY や NOW など) を使用している • 所有者、自動採番、ディビジョン、監査項目 (CreatedDateとCreatedByID以外)を参照している • インデックス付けできない項目(複数選択リストなど)を参照している • マルチ通貨組織における通貨項目を使用している • 特殊な機能を持つ以下の標準項目を参照している
  • 5. 3. 抽出条件式 (where句) ① • AND • インデックス化項目に対する2つ以上の条件がAND結合されている • 各インデックスを2倍のしきい値で選択性の高低判定 • 選択性の高い全てのインデックスの「積」を満たすレコード数がしきい値以 下なら、それら全てのインデックスが使用される • 全てが標準インデックスなら、標準インデックスのしきい値 • 1つでもカスタムインデックスが含まれるなら、カスタムインデックスのし きい値 • インデックスのいずれかから返されるレコード数が、オブジェクトのレコー ド数の 20 % または合計レコード数 666,666 を超えない限り、インデッ クスが使用される。 Copyright © TerraSky Co., Ltd. All Rights Reserved. 5
  • 6. 4. 抽出条件式 (where句) ② • OR • インデックス化項目に対する2つ以上の条件がOR結合されている • 全ての条件項目に選択性が高いインデックスが存在し、かつ、各条件を満た すレコードの「和」がしきい値以下なら、それら全てのインデックスが使用 される • 全てが標準インデックスなら、標準インデックスのしきい値 • 1つでもカスタムインデックスが含まれるなら、カスタムインデックスのし きい値 • すべてのインデックスから返されるレコード数が、オブジェクトのレコード 数の 10 % または合計レコード数 333,333 を超えない限り、インデック スが使用される。 • LIKE • Force.com クエリオプティマイザでは内部統計情報テーブルは使用されま せん。代わりに、最大で 100,000 件の実際のデータのレコードを抽出し、 カスタムインデックスを使用するかどうかが決定されます。 Copyright © TerraSky Co., Ltd. All Rights Reserved. 6
  • 7. 5. インデックスが使われないケース • 比較方法が一致しない「!=」「NOT IN」 • 『一致しない』は全件検索をしないとわかりません。可能であれば存在する もののような逆の記述に変えましょう。 • 後方一致、中間一致 Like %_(ワイルドカード) • 中間一致: 「次の文字列を含む」, Text__c LIKE ‘%Foo%’ 後方一致: Text__c LIKE ‘%Foo’ SOSLでの検索を検討してみてください。 • 数値、日付、日付/時間以外の項目での範囲検索や大小比較 • Nullの検索 • 基本的にはNull検索はインデックスを使いませんが、カスタムインデックス はSFDCサポートに依頼すればNullをインデックスに含めることは可能にな ります。その場合はNullもインデックス検索で使用出来ます。 Copyright © TerraSky Co., Ltd. All Rights Reserved. 7
  • 8. 6. Think of what to do next • 2列カスタムインデックス • 2つの項目を複合してインデックスに出来る。例えば住所のように1つ目を都道府県、 2つ目を市区町村のように作成できる。2つ目の項目はNullでも可。項目個別にイン デックスを作るより効果が高い。 • スキニーテーブル • 特定オブジェクトの一部の項目のみでコンパクトに構成されたオブジェクト • 主に大量のレコードを含むオブジェクトに対するクエリー(レポート、リストビュー、 SOQL)の性能を向上させるために利用される • 対象オブジェクトの持つ項目のうち、100項目までをスキニーテーブルに含められる • 組織のデータストレージの対象としてカウントされません。 • ディビジョン • データを論理セクションへ分割する。 • ひとつのオブジェクトに 100 万を超えるレコードがある場合、および、35 を超える ライセンスがある場合に有効化できる。 Copyright © TerraSky Co., Ltd. All Rights Reserved. 8
  • 9. 7. 実装にあたって • 効率的なインデックスの机上検討 • オブジェクトのレコード数、項目のカーディナリティ検索条件、選択されるレ コード数の想定をしてインデックスの利用を机上検討 • 検証 • SOQLを作成し、統計情報を取って効果的かを確認。 • 更なる検討 • 統計情報の結果から、再度検討そして検証の繰り返し。 2列インデックスやディビジョン、スキニーテーブルも検討してみましょう。 • デメリットの理解 • インデックスは別オブジェクトとして作成されます。そのためインデックスが 多いと更新処理のパフォーマンスが劣化します。 Copyright © TerraSky Co., Ltd. All Rights Reserved. 9
  • 10. 8. インデックスが使われているかを確認する方法 Copyright © TerraSky Co., Ltd. All Rights Reserved. 10 • 開発者コンソールでQuery Planを取得しましょう。 • インデックスがある場合は2行以上結果が表示されます。 • SalesforceはCostが低いものを選択します。Costは1以下を目標としましょう。 • Cardinalityは選択対象の件数です。先に説明したインデックスのしきい値がこち らに該当しますので注意しましょう。 詳しくはTerrasky TechBlogで!
  • 11. 8. インデックスが使われているかを確認する方法 Copyright © TerraSky Co., Ltd. All Rights Reserved. 11 • 開発者コンソールでQuery Planを取得しましょう。 • インデックスがある場合は2行以上結果が表示されます。 • SalesforceはCostが低いものを選択します。Costは1以下を目標としましょう。 • Cardinalityは選択対象の件数です。先に説明したインデックスのしきい値がこち らに該当しますので注意しましょう。 詳しくはTerrasky TechBlogで!
  • 12. 9. おまけ SOSL SOSLで、リストビュー内の検索が新しくサポートされるようになりました。 リストビュー内の検索 USING ListView を使用すると、オブジェクトのリストビューを検索でき、大きなリ ストビューから 1 件のレコードを容易に探すことができます。 次の SOSL ステートメントは MVP Customers リストビューで Acme の Account オブジェクトを検索しています。 FIND {Acme} IN ALL FIELDS RETURNING Account(Id, Name USING ListView=MVPCustomers) Copyright © TerraSky Co., Ltd. All Rights Reserved. 12
  • 13. Copyright © TerraSky Co., Ltd. All Rights Reserved. 13