我似乎找不到直接的答案。我有以下专栏:
ZipCode
StateAbbreviation
CountyName
我将通过ZipCode
单独或StateAbbreviation/CountyName
组合来查询表格。我定义了一个PK Id
列,所以这是我的聚集索引。
什么是推荐的方法来实现更好的性能/效率?考虑到我将如何搜索表格,我应该创建什么样的索引?
答案 0 :(得分:1)
首先运行您的应用,看看它是否足够快没有任何索引。
第二 - 如果某些地方的速度很慢,请找到此代码生成的SQL工作负载 - 您有什么样的查询?尝试在ZipCode
或(StateAbbreviation, CountyName)
上添加索引,然后再次运行您的应用,看看它是如何执行的。
如果那个索引解决了您的问题 - >去享受你的业余时间! :-)
如果不是:添加第二个索引并查看是否有帮助。
不要过度索引只是因为你可以!一次一个,只有在疼的时候。不要只是提前添加索引 - 只有在 出现性能问题时才会添加。要了解它是否有帮助,您需要再次测量,测量和测量,并与之前的测量基准进行比较。
很少使用非聚簇索引 - 对于非聚簇索引,您的查询需要恰好,甚至可以由SQL Server查询优化器考虑。如果表格“太小”,则首选表格扫描。如果您始终使用SELECT *
- 您的非聚簇索引也可能会被忽略。
答案 1 :(得分:0)
如果确实添加了索引,则应使用与查询相同的顺序在索引中对列进行排序。如果您不这样做,则无法保证将使用索引。索引1)邮编;索引2)州缩写,CountyName。
正如@marc_s所述,索引应在必要时使用,因为它们在修改/插入/删除行时会产生一些额外的开销。但是,如果它们是直接引用表,那么索引唯一的负面影响就是它使用的磁盘空间。我通常发现它的价值低于没有指数。