hri*_*shi 3 sql sql-server join
有没有替代连接来提高性能?
编辑(gbn):与join-or-correlation-subquery-with-exists-clause相关,哪一个更好
为什么没有人提到嵌套循环连接?
mar*_*c_s 13
不是JOIN的"替代"方式,而是提高JOIN性能的提示:在SQL Server中,很多人都不知道你应该总是在外键列上放置非聚集索引.有些人认为SQL Server会自动执行此操作 - 但事实并非如此.
所以,如果你有一个表Customer,它可能有一个类似的主键CustomerID.SQL Server将自动为其添加索引.
但是,如果您有一个Order与其具有外键关系的表,则Customer默认情况下该列上没有索引Order.CustomerID.但是这样的索引对于连接和查找非常有用且有用,因此这是我总是建议的最佳实践:在表中的所有外键列上放置一个索引.
从你的另一个问题
select *
from ContactInformation c
where exists (select * from Department d where d.Id = c.DepartmentId )
select *
from ContactInformation c
inner join Department d on c.DepartmentId = d.Id
Run Code Online (Sandbox Code Playgroud)
如果您想要两个表的输出,那么您可以选择其他选项而不是 JOIN。这里的第二个查询。
如果它很慢,那么通常:
降低连接性能的策略:
所有这些策略都针对特定查询进行了优化。您无法制定可以改进所有查询的通用解决方案。