首页 文章

SQL Server索引问题

提问于
浏览
3

我有一个查询连接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 回答

  • 1

    出于查询目的,这没关系 . 您可以根据以下内容考虑备用排序顺序:

    • 可能将索引用于其他查询(包括一些使用ORDER BY ...其中一列)

    • 限制索引碎片(通过使用往往在表格末尾添加记录的订单和/或附近的非选择性参数)

    Edit: 关于第二个想法, having the most selective column first 可以帮助优化器,例如通过为它提供更好的估计行产量等......但是这个重要的问题可能正在逐渐脱离主题,因为OP的问题是连接条件的顺序是否重要 .

  • 1

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

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

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

  • 5

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

    因此,“Status Ok”/“Status denied”字段应该是字段3,SSN或Phonenumber应该是索引上的字段1

相关问题