日期:2014-05-18  浏览次数:20518 次

在表上建索引,在列里选多列和每个列建个索引有什么区别呢?
RT

比如Test表有Col001,Col002
1、建一个索引IX_test_1,同时选择col001,col002列
2、建二个索引,每个列对应一个

这种有什么区别呢?

------解决方案--------------------
要看你的查询语句经常是怎么用的了,弄懂索引的实质就应该清楚区别了,不同的语句,两种索引各有优略。通常你where语句后面的某些字段,或join后面的某些字段如果经常合在一起用,建第一种,如建一个索引IX_test_1,同时选择col001,col002列,会好点。
------解决方案--------------------
引用楼主 skpay 的帖子:
RT

比如Test表有Col001,Col002
1、建一个索引IX_test_1,同时选择col001,col002列
2、建二个索引,每个列对应一个

这种有什么区别呢?

------解决方案--------------------
探讨
引用楼主 skpay 的帖子:
RT

比如Test表有Col001,Col002
1、建一个索引IX_test_1,同时选择col001,col002列
2、建二个索引,每个列对应一个

这种有什么区别呢?


建索引IX_test_1,同时选择col001,col002列,适合于查询: where col001='xx' and col002='b'
建索引只选择col001列,适合查询:where col001='xx'
建索引只选择col002列,适合查询:where col002='xx'

------解决方案--------------------
区别在于:

1. 如果索引是在两个列上: col001 and col002 (注意: 有先后次序的), 那么:
当你的WHERE clause只有col002时, SQL Server在优化检索时, 就会忽略这个索引, 转而去找其他索引.

2. 当你在两个上分别建索引时, 那么:
当你的WHERE clause有col001和col002时, SQL Server会用并行处理(parallel)的方式来优化检索.
------解决方案--------------------
原侧就是在经常作为查询使用的列上建索引