Craig Freedman's SQL Server Blog

A discussion of query processing, query execution, and query plans in SQL Server.

Parallel Nested Loops Join

SQL Server parallelizes a nested loops join by distributing the outer rows (i.e., the rows from the...

Author: Craig Freedman Date: 11/08/2006

Parallel Scan

In this post, I’m going to take a look at how SQL Server parallelizes scans. The scan operator is...

Author: Craig Freedman Date: 11/02/2006

The Parallelism Operator (aka Exchange)

As I noted in my Introduction to Parallel Query Execution post, the parallelism (or exchange)...

Author: Craig Freedman Date: 10/25/2006

Index Union

I was planning to continue writing about parallelism this week (and I will continue another time in...

Author: Craig Freedman Date: 10/18/2006

Introduction to Parallel Query Execution

SQL Server has the ability to execute queries using multiple CPUs simultaneously. We refer to this...

Author: Craig Freedman Date: 10/11/2006

Decorrelating Subqueries

In my previous post, we saw some examples where the optimizer is able to take a query with a...

Author: Craig Freedman Date: 10/04/2006

Scalar Subqueries

A scalar subquery is a subquery that returns a single row. Some scalar subqueries are obvious. For...

Author: Craig Freedman Date: 09/27/2006

Hash Aggregate

In my prior two posts, I wrote about the stream aggregate operator. Stream aggregate is great for...

Author: Craig Freedman Date: 09/20/2006

Stream Aggregate

There are two physical operators that SQL Server uses to compute general purpose aggregates where we...

Author: Craig Freedman Date: 09/13/2006

Aggregation

Aggregation refers to the collapse of a larger set of rows into a smaller set of rows. Typical...

Author: Craig Freedman Date: 09/06/2006

Subqueries: ANDs and ORs

In my “Introduction to Joins” post, I gave an example of how we can use a semi-join to evaluate an...

Author: Craig Freedman Date: 08/30/2006

Subqueries in CASE Expressions

In this post, I’m going to take a look at how SQL Server handles subqueries in CASE expressions....

Author: Craig Freedman Date: 08/23/2006

Summary of Join Properties

The following table summarizes the characteristics of the three physical join operators which I...

Author: Craig Freedman Date: 08/16/2006

Hash Join

When it comes to physical join operators, hash join does the heavy lifting. While nested loops join...

Author: Craig Freedman Date: 08/10/2006

Merge Join

In this post, I’ll describe the second physical join operator: merge join (MJ). Unlike the nested...

Author: Craig Freedman Date: 08/03/2006

Nested Loops Join

SQL Server supports three physical join operators: nested loops join, merge join, and hash join. In...

Author: Craig Freedman Date: 07/26/2006

Introduction to Joins

Joins are one of the most important operations performed by a relational database system. An RDBMS...

Author: Craig Freedman Date: 07/19/2006

Index Examples and Tradeoffs

The optimizer must choose an appropriate “access path” to read data from each table referenced in a...

Author: Craig Freedman Date: 07/13/2006

Seek Predicates

Before SQL Server can perform an index seek, it must determine whether the keys of the index are...

Author: Craig Freedman Date: 07/07/2006

Bookmark Lookup

In my last post, I explained how SQL Server can use an index to efficiently locate rows that qualify...

Author: Craig Freedman Date: 06/30/2006

Scans vs. Seeks

Scans and seeks are the iterators that SQL Server uses to read data from tables and indexes. These...

Author: Craig Freedman Date: 06/26/2006

Properties of Iterators

In this post, I’ll give an overview of three interesting properties of iterators that can affect...

Author: Craig Freedman Date: 06/19/2006

Viewing Query Plans

In my last post, I explained that SQL Server executes a query by compiling it into an iterator tree...

Author: Craig Freedman Date: 06/13/2006

The Building Blocks of Query Execution

What are iterators? SQL Server breaks queries down into a set of fundamental building blocks that we...

Author: Craig Freedman Date: 06/08/2006

Why am I starting this blog?

About two years ago I presented a talk to a couple of SQL Server user groups where I explained in...

Author: Craig Freedman Date: 06/07/2006

<Previous