SQL Server索引问题

时间:2009-09-17 17:11:08

标签: sql sql-server tsql indexing performance

我有一个在SQL Server 2005中连接3个表的查询,但是没有Where子句,所以我索引了连接语句中找到的字段。

如果我的索引设置为Col1,col2,col3

我的加入是

Tbl1
inner join tbl2
On
Tbl1.col3=tbl2.col3
Tbl1.col2=Tbl2.col2
Tbl1.col1=Tbl2.col1

与索引的顺序相比,join语句的顺序是否有所不同?我应该将我的索引设置为Col3,col2,col1吗?或者将我的连接语句重置为Col1,col2,col3?

由于

3 个答案:

答案 0 :(得分:5)

SQL Server查询优化器应该解决它。无需为您提供的示例进行更改。

这是一个简单的答案,它取决于您选择的列以及如何加入3个表。

注意:我个人更喜欢更改JOIN以匹配“自然”订单。也就是说,我尝试以与我的键和/或索引匹配的相同顺序(JOIN,WHERE)使用我的列。正如Joel所说,它可以在以后帮助进行故障排除。

答案 1 :(得分:1)

对于查询目的,没关系。您可以根据以下内容考虑备用排序序列:

  • 可能将索引用于其他查询(包括一些使用ORDER BY ...其中一列)
  • 限制索引碎片(通过使用往往在表格末尾添加记录的订单和/或附近的非选择性参数)

编辑第二个想法,首先选择最具选择性的列可以帮助优化器,例如为其提供更好的估计行产量等等......但是这个重要的问题可能是脱离主题,因为OP的问题是加入条件的顺序是否重要。

答案 2 :(得分:1)

如果你总是在Col1-3上有一个连接,那么你应该建立索引,以便“最有特色的列”在第一个字段中,最常见的列在最后一个字段中

因此,“Status Ok”/“Status denied”字段应为字段3,SSN或Phonenumber应为索引上的第一字段