【发布时间】:2020-12-28 20:16:43
【问题描述】:
这可能看起来很基本,但我花了最后一个小时搜索并找不到直接答案。
让我们有两个表:tblCustomer 和 tblStore。
tblCustomer 的主唯一索引为 CustomerNumber 和 Version。
问题1:如果tblStore没有CustomerNumber作为其主键,我是否还能通过a得到更好的优化:
From
tblStore s
Left Join
tblCustomer c On s.CustomerNumber = c.CustomerNumber
还是让“on”成为两个表的索引更好?
问题 2:我只想要客户版本为 1 的行。我应该说:
From
tblStore s
Left Join
tblCustomer c On s.CustomerNumber = c.CustomerNumber
And c.Version = 1
我认为这比稍后在 Where 子句中执行更好,但它是否使通过索引连接更好,或者 CustomerNumber 本身就足够了。
我正在查询包含很多行的内容,因此任何建议都会有所帮助。
谢谢!
【问题讨论】:
-
如果您担心连接性能,请使用简单的递增整数主键。将条件放入
join或where子句中对性能没有影响,但它会产生不同的结果。 -
根据我的阅读,如果我在 Where 子句中放置一个条件,它最初会拉回所有行,然后在到达 Where 子句时限制它们。这不是真的吗?
-
这根本不是真的。谓词下推意味着 SQL Server 甚至可以在加载磁盘行时直接在存储引擎上过滤它们。