Sql server 如果在查询中包含第二个非索引列,SELECT是否会变慢?

Sql server 如果在查询中包含第二个非索引列,SELECT是否会变慢?,sql-server,database,database-performance,Sql Server,Database,Database Performance,假设我有下表: 表测试: ID列是主键、唯一键,而聚集索引Ver列并没有什么特别之处 到目前为止,我已经通过以下方式选择了查询: SELECT (NAME, Col1, Col2) WHERE ID = '01' SELECT (NAME, Col1, Col2) WHERE ID = '01' AND Ver = '8' 下一个版本将以以下方式包含SELECT查询: SELECT (NAME, Col1, Col2) WHERE ID = '01' SELECT (NAME, Col1,

假设我有下表:

表测试:

ID列是主键、唯一键,而聚集索引Ver列并没有什么特别之处

到目前为止,我已经通过以下方式选择了查询:

SELECT (NAME, Col1, Col2) WHERE ID = '01'
SELECT (NAME, Col1, Col2) WHERE ID = '01' AND Ver = '8'
下一个版本将以以下方式包含SELECT查询:

SELECT (NAME, Col1, Col2) WHERE ID = '01'
SELECT (NAME, Col1, Col2) WHERE ID = '01' AND Ver = '8'
为什么??因为我计划在系统中的更新和删除查询中包含此查询,这将确保不会出现并发编辑冲突,因为它只能在ID和版本匹配的地方更新,如果同时更改了实体,则选择部分将保护实体不被更新,因为它不会返回任何内容。没有要更新或删除的内容

问题 这个更改是否会影响我的DBs性能,或者不会影响查询中的Ver列,因为select中的一列是唯一的主键

如果这会影响记录检索的性能,我应该在聚集索引中包括Ver和ID吗?Ver应该是第二个索引吗


欢迎提供事实和意见。

您需要尝试一下,并查看查询计划以确定,但我的感觉是:


版本不需要在索引中。当SQL Server生成计划时,它足够聪明,可以看到ID是唯一的。因此,它将获取ID为“1”的记录,然后按Ver为“8”过滤该记录。由于此部分仅作用于零条或一条记录,因此不需要索引。

请注意,按Ver='8'进行筛选不会影响性能,因为ID列上的索引是聚集的,因此存储所有列的值。若ID上的索引是非聚集的,那个么它可能会产生额外的键lookupSounds good。是否有可信和/或官方消息来源对此进行了说明?谢谢@DDan,您可以查看以确认聚集索引存储了数据行。要了解为什么这意味着不需要额外的查找,您需要了解覆盖索引,但我找不到它们的官方来源。