假设我有下表:
表测试:
ID | Name | Ver | Col3| Col4 | ...
01 | ABC | 2 | xxx | yyy | ...
02 | DEF | 8 | xxx | yyy | ...
03 | DEF | 8 | xxx | yyy | ...
...
ID
列是主键,唯一键,聚集索引 Ver
列没什么特别的
到目前为止,我通过以下方式进行 SELECT 查询:
SELECT (NAME, Col1, Col2) WHERE ID = '01'
下一个版本将以下列方式包含 SELECT 查询:
SELECT (NAME, Col1, Col2) WHERE ID = '01' AND Ver = '8'
为什么呢?因为我打算将此查询包含在系统中的 UPDATE 和 DELETE 查询中,这样可以确保不存在并发编辑冲突,因为它只能更新在ID
和Ver
匹配的情况下,如果实体在此期间发生更改, SELECT 部分将保护实体免于更新,因为它不会返回任何内容。 (无需更新或删除)
此更改是否会影响我的数据库性能,或者它不会打扰查询中的Ver
列,因为select中的一列是唯一主键
如果它会影响记录检索的效果,我应该将Ver
与ID
一起包含在聚集索引中吗? Ver
应该是第二个索引吗?
欢迎提供事实和意见。
答案 0 :(得分:1)
您需要尝试并查看查询计划以确保但我的感觉是:
Ver不需要在索引中。当SQL Server生成计划时,它足够聪明,可以看到该ID是唯一的。因此,它将使用ID = '1'
获取记录,然后按Ver = '8'
过滤该单条记录。由于这部分只对零或一条记录起作用,因此它不需要索引。