具有多列的SQL Server非群集索引

时间:2013-12-05 06:41:57

标签: sql-server non-clustered-index

我似乎找不到直接的答案。我有以下专栏:

ZipCode
StateAbbreviation
CountyName

我将通过ZipCode单独或StateAbbreviation/CountyName组合来查询表格。我定义了一个PK Id列,所以这是我的聚集索引。

什么是推荐的方法来实现更好的性能/效率?考虑到我将如何搜索表格,我应该创建什么样的索引?

2 个答案:

答案 0 :(得分:1)

首先运行您的应用,看看它是否足够快没有任何索引。

第二 - 如果某些地方的速度很慢,请找到此代码生成的SQL工作负载 - 您有什么样的查询?尝试在ZipCode(StateAbbreviation, CountyName)上添加索引,然后再次运行您的应用,看看它是如何执行的。

如果那个索引解决了您的问题 - >去享受你的业余时间! :-)

如果不是:添加第二个索引并查看是否有帮助。

不要过度索引只是因为你可以!一次一个,只有在疼的时候。不要只是提前添加索引 - 只有在 出现性能问题时才会添加。要了解它是否有帮助,您需要再次测量,测量和测量,并与之前的测量基准进行比较。

很少使用非聚簇索引 - 对于非聚簇索引,您的查询需要恰好,甚至可以由SQL Server查询优化器考虑。如果表格“太小”,则首选表格扫描。如果您始终使用SELECT * - 您的非聚簇索引也可能会被忽略。

答案 1 :(得分:0)

如果确实添加了索引,则应使用与查询相同的顺序在索引中对列进行排序。如果您不这样做,则无法保证将使用索引。索引1)邮编;索引2)州缩写,CountyName。

正如@marc_s所述,索引应在必要时使用,因为它们在修改/插入/删除行时会产生一些额外的开销。但是,如果它们是直接引用表,那么索引唯一的负面影响就是它使用的磁盘空间。我通常发现它的价值低于没有指数。