SQL Server 2008中以下两个查询的性能有何不同
查询1:
SELECT A.Id,A.Name,B.Class,B.Std,C.Result,D.Grade
FROM Student A
INNER JOIN Classes B ON B.ID = A.ID
INNER JOIN Results C ON C.ID = A.ID
INNER JOIN Grades D ON D.Name = A.Name
WHERE A.Name='Test' AND A.ID=3
查询2:
SELECT A.Id,A.Name,B.Class,B.Std,C.Result,D.Grade
FROM Student A
INNER JOIN Classes B ON B.ID = A.ID AND A.Name='Test' AND A.ID=3
INNER JOIN Results C ON C.ID = A.ID
INNER JOIN Grades D ON D.Name = A.Name
在上述两个查询中,有没有最好的方法来实现最佳性能
答案 0 :(得分:3)
您可以100%保证他们执行相同的计划。
在INNER JOIN中拆分AND / WHERE子句时,唯一重要的是在使用FORCE ORDER之类的选项时。
<小时/> 要以牺牲写入为代价获得出色的性能,请创建以下索引:
A (id, name)
B (id) includes (class, std)
C (id) includes (result)
D (name) includes (grade)
但是,它仍取决于您的数据分布和索引的选择性,以确定它们是否实际使用。例如如果您的成绩表仅包含5个条目A,B,C,D,E,则不会使用任何索引,它只会扫描并缓冲内存中的表。
答案 1 :(得分:1)
如果你看一下每个人的执行计划,你会发现他们很可能会有相同的执行计划。
最好地提高这些类型查询的性能的方法是确保您已设置正确的索引。您的所有ID
列都应包含索引,如果Grades
是一个较大的表,请考虑在Name
上为其和Student