Sql server 主键在从未使用时是否有用

Sql server 主键在从未使用时是否有用,sql-server,Sql Server,问题是关于表2.id的 表1 id -- Uniqueidentifier primary key 表2 id -- Uniqueidentifier primary key id_table1 -- Duplicate foreign key value -- varchar or other 可能的查询包括: select table1.id, table2.value from table1 inner join table2 ON table2.

问题是关于表2.id的

表1

id     -- Uniqueidentifier primary key   
表2

id        -- Uniqueidentifier primary key
id_table1 -- Duplicate foreign key
value     -- varchar or other
可能的查询包括:

select table1.id, table2.value 
from table1
inner join table2 ON table2.id_table1 = table1.id
where table1.id = 'foo'


是否在存在或不存在table2.id的情况下更改了性能。即使查询不使用它?

我认为答案是肯定的。拥有您永远不会使用的列和索引将对性能产生负面影响,尽管可能不会很大程度上取决于您的具体情况


我认为您真正需要的是更好地理解主键和索引。我特别建议你研究一下关于代理键的争论。你会发现很多关于这个话题的信息

如果这些都是查询,为什么还要麻烦将id列添加到第二个表中呢?只需使用
id\u table1
value
的组合作为主键。如果您在该组合上已经有一个聚集的唯一索引,它不会影响性能,只会影响存储大小。@IvanStarostin虽然阅读起来很有趣,但您提供的链接对这个问题本身没有任何限制。OP是否应该使用int或guid是一个与发布的完全不同的问题。@ZoharPeled我知道。起初,我想在我的评论中添加“你问错了问题”的链接。我猜他不会不请自来的。主键列本身不提供任何问题,而
guid+clustered
组合有时会提供任何问题。不确定
guid+something
作为集群pk的想法是否更好。
select value
from table2
where table2.id_table1 = 'foo'