tags:

views:

74

answers:

3

Just a simple question, but does the order of your index matter when it spans over multiple columns?

For example, taking the query:

SELECT * FROM my_table WHERE (column_1 = 1 AND column_2 = 2)

If I want to add an index for a query like this, does it matter if my index is created like this:

CREATE INDEX my_index
ON my_table (column_1, column_2)

Or like this:

CREATE INDEX my_index
ON my_table (column_2, column_1)

Thanks for the help!

+5  A: 

In the example you give, the column order does not matter.

It would matter if you order on a column; an index on (col1,col2) can be used for ORDER BY col1, col2 but not for ORDER BY col2, col1.

For WHERE clauses, an index on (col1, col2) works for WHERE col1 = 1 AND col2 = 1. It also works for WHERE col1 = 1. But it can't help with WHERE col2 = 1.

Andomar
Actually it can matter even in this case. If almost every row has col1 = 1, the index would most likely work better if col2 were first, even wheen you are querying both.
Mark Byers
It could matter in the provided example too, if one column has a significantly higer elesctivity than the other. Put columns with high selectivity (many different values) first.
Manu
+2  A: 

This shoudl give you a good idea

SQL Server Clustered Index - Order of Index Question

There are many more like this on SO.

astander
A: 

The best way to find out is to measure it. Try one, measure the performance, then remove that index and try the other. Typically you want data that is queried together to lie close together in the index on the disk, and the order of the columns in the index makes a difference to the way the index is stored on disk. It's very difficult to guess exactly what combination of indexes will work best, so try a few different possibilities and measure to find out which is best for your data.

Mark Byers