Sql server 具有多列的SQL Server非聚集索引

Sql server 具有多列的SQL Server非聚集索引,sql-server,non-clustered-index,Sql Server,Non Clustered Index,我似乎找不到一个直截了当的答案。我有以下专栏: ZipCode StateAbbreviation CountyName 我将通过ZipCode单独或state缩写/CountyName组合查询表。我定义了一个PKId列,因此这是我的聚集索引 为实现更好的性能/效率,建议采用什么方法?考虑到我将如何搜索表,我应该创建什么样的索引 首先-运行你的应用程序,看看它是否足够快,没有任何索引 第二,如果在某些地方速度较慢,请查找此代码生成的SQL工作负载—您有什么类型的查询?尝试在ZipCode或(s

我似乎找不到一个直截了当的答案。我有以下专栏:

ZipCode
StateAbbreviation
CountyName
我将通过
ZipCode
单独或
state缩写/CountyName
组合查询表。我定义了一个PK
Id
列,因此这是我的聚集索引


为实现更好的性能/效率,建议采用什么方法?考虑到我将如何搜索表,我应该创建什么样的索引

首先-运行你的应用程序,看看它是否足够快,没有任何索引

第二,如果在某些地方速度较慢,请查找此代码生成的SQL工作负载—您有什么类型的查询?尝试在
ZipCode
(state缩写,CountyName)
上添加索引,然后再次运行应用程序并查看其性能

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

如果没有:添加第二个索引,看看是否有帮助

不要因为可以,就过度编制索引!一次一个,只有在疼的时候。不要只是提前添加索引-只在性能出现问题时添加索引。为了看它是否有用,你需要测量,测量,再测量,并与之前的测量基线进行比较


非聚集索引很少被使用——您的查询需要恰好适合SQL Server查询优化器考虑的非聚集索引。如果表格“太小”,则首选表格扫描。如果您一直使用
SELECT*
,您的非聚集索引也可能被忽略

首先-运行你的应用程序,看看它是否足够快,没有任何索引

第二,如果在某些地方速度较慢,请查找此代码生成的SQL工作负载—您有什么类型的查询?尝试在
ZipCode
(state缩写,CountyName)
上添加索引,然后再次运行应用程序并查看其性能

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

如果没有:添加第二个索引,看看是否有帮助

不要因为可以,就过度编制索引!一次一个,只有在疼的时候。不要只是提前添加索引-只在性能出现问题时添加索引。为了看它是否有用,你需要测量,测量,再测量,并与之前的测量基线进行比较


非聚集索引很少被使用——您的查询需要恰好适合SQL Server查询优化器考虑的非聚集索引。如果表格“太小”,则首选表格扫描。如果您一直使用
SELECT*
,您的非聚集索引也可能被忽略

如果确实添加了索引,则应使用与查询相同的顺序对索引中的列进行排序。如果不这样做,就不能保证索引会被使用。索引1)Zipcode;索引2)州缩写,CountyName


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

如果您添加了索引,那么列在索引中的顺序应该与查询的顺序相同。如果不这样做,就不能保证索引会被使用。索引1)Zipcode;索引2)州缩写,CountyName

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

这是一个大表吗(你能估计行数吗)?我们将在这个表上为您提供大量的插入/更新?这是一个大表吗(您能估计行数吗)?我们将为您在这张桌子上提供大量的插入/更新?