Step by Step of Tuning Queries on SQL Server

Rafael Rampineli
3 min readAug 20, 2024

--

Let’s walk through an example of query tuning in SQL Server, including analyzing an execution plan, identifying issues, and applying optimizations.

Example Scenario:

Suppose you have a query that retrieves orders from a SalesOrders table, and it's running slower than expected.

Query Example

SELECT 
OrderID,
CustomerID,
OrderDate,
TotalAmount
FROM
SalesOrders
WHERE
OrderDate >= '2023-01-01'
AND CustomerID = 'CUST123'
ORDER BY
OrderDate DESC;

Step-by-Step Tuning Process

1. Generate and Review the Execution Plan

Enable Actual Execution Plan:

  • In SQL Server Management Studio (SSMS), open a new query window.
  • Click on “Include Actual Execution Plan” (or press Ctrl+M).

Execute the Query:

  • Run the query to generate the execution plan.

Examine the Execution Plan:

  • Look for the types of operations used (scans, seeks, sorts, etc.).
  • Pay attention to the cost percentage of each operator.

2. Identify Issues in the Execution Plan

Possible Findings:

  • Table Scan: If you see a “Table Scan” operator, it indicates that SQL Server is scanning the entire table rather than using an index. This is inefficient, especially for large tables.
  • High Cost Operations: Identify operations with high cost percentages. For example, a sort operation may be consuming a lot of resources.
  • Missing Indexes: Look for any recommendations for missing indexes.

3. Apply Optimizations

Optimization 1: Create an Index

If the execution plan shows a table scan, creating an index can improve performance.

Analyze the Query:

  • The query filters on OrderDate and CustomerID and sorts by OrderDate.

Create an Index:

  • An index on the columns used in the WHERE clause and ORDER BY clause can help.
CREATE INDEX IDX_SalesOrders_OrderDate_CustomerID 
ON SalesOrders (OrderDate DESC, CustomerID);

This index covers both the filter and sort operations.

Optimization 2: Update Statistics

  • Ensure statistics are up to date to help the optimizer make better decisions.
UPDATE STATISTICS SalesOrders;

Optimization 3: Rewrite the Query

Sometimes, rewriting the query can yield performance improvements.

Original Query:

SELECT 
OrderID,
CustomerID,
OrderDate,
TotalAmount
FROM
SalesOrders
WHERE
OrderDate >= '2023-01-01'
AND CustomerID = 'CUST123'
ORDER BY
OrderDate DESC;
  • Rewritten Query:
SELECT 
OrderID,
CustomerID,
OrderDate,
TotalAmount
FROM
SalesOrders
WHERE
OrderDate >= '2023-01-01'
AND CustomerID = 'CUST123'
OPTION (RECOMPILE);

Using OPTION (RECOMPILE) forces SQL Server to compile a new execution plan each time the query runs. This can be useful if parameter sniffing is causing issues.

4. Test and Validate

Re-run the Query:

  • Execute the query again and review the execution plan.

Measure Performance:

  • Compare the execution times before and after applying optimizations.

Validate Results:

  • Ensure that the query returns the expected results and that performance has improved.

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —

Summary

In this example:

  • An index was created to optimize filtering and sorting operations.
  • Statistics were updated to ensure the query optimizer had accurate information.
  • The query was optionally recompiled to address potential parameter sniffing issues.
  • The query was simple, but the step-by-step to tuning a query are the same for complex query.

By following these steps, you should see improvements in query performance and overall efficiency.

--

--

Rafael Rampineli
Rafael Rampineli

Written by Rafael Rampineli

I specialize in managing and optimizing complex database environments to ensure high availability, performance, and data integrity.

No responses yet