Wednesday, 9 April 2025

🏋️‍♂️ Boosting Query Performance with Skinny Tables in Salesforce

Salesforce is known for its powerful platform, but performance can take a hit when working with large datasets. This is where Skinny Tables come into play. They’re a Salesforce-supported performance optimization feature that helps speed up reports, dashboards, and queries—especially in data-heavy orgs.



🔍 What is a Skinny Table?

A Skinny Table is a custom, read-only table maintained by Salesforce. It contains a subset of fields from a standard or custom object—indexed and denormalized to avoid joins and speed up queries.

  • Managed internally by Salesforce

  • Updated near real-time with the source object

  • Limited to 100 fields per table

  • Fields must be of certain data types (e.g., no long text, rich text, etc.)


📘 Use Case: Slow Report on Opportunities

Problem: A report filtering on multiple Opportunity fields (e.g., StageName, Amount, OwnerId, Custom_Field__c) is running slow due to large volume (~10M rows) and non-indexed filters.

Solution: Create a skinny table with just the critical fields used in the report filter and display.


Skinny Table: Opportunity_Skinny Fields: - Id - StageName - Amount - OwnerId - Custom_Field__c - CloseDate

Result: Queries now pull from a smaller, indexed table with no joins—improving performance drastically.


🛠 How to Use Skinny Tables

You cannot create skinny tables via UI or Apex. You must raise a Salesforce Support case with:

  • Object name

  • Fields to include

  • Use case (e.g., performance bottleneck on reporting or SOQL)


✅ Best Practices

  1. Use only when needed
    Ideal for high-volume objects and slow queries. Avoid overuse—each skinny table adds overhead to SFDC's backend.

  2. Pick frequently used fields
    Focus on filter and output fields. Avoid large text, formula, or lookup fields.

  3. Test before and after
    Benchmark SOQL or report runtime to validate the improvement.

  4. Be aware of limitations

    • Doesn’t support sandbox refresh automatically

    • No support for all field types

    • Changes require support ticket

  5. Combine with other optimizations
    Skinny tables work well alongside custom indexes and selective queries.




✅ Steps to Enable:

  1. Open a Salesforce Support Case

  2. Case Details to Provide:

    • Subject: Request to create a skinny table

    • Reason: Performance optimization

    • Details:

      • API name of the object (e.g., Opportunity)

      • List of fields to include (up to 100)

      • Example SOQL query or report that’s slow

      • Sandbox or Production org

      • Justification: Performance issues, query time, or user impact

  3. Salesforce Support Review:

    • They’ll validate field compatibility

    • Implement the skinny table on backend

    • Provide confirmation once it’s live

  4. Test & Monitor:

    • Validate performance improvements

    • Monitor regularly—especially after schema changes



🧠 Pro Tip

You can use Query Plan Tool in Developer Console to identify whether a query is selective—and whether skinny tables or custom indexes could help.



📌 Final Thoughts

Skinny tables are a powerful lever for performance, especially in data-intensive orgs. Use them strategically, monitor their impact, and pair them with indexing and query optimization for maximum benefit.

No comments:

Post a Comment