日期:2014-05-17  浏览次数:20604 次

sql的效率问题,希望大家积极讨论
现有学生表(Student)、科目表(Subject)、成绩表(Result)三个表 其中Result.StudentNO引用Student.StudentNO ,Result.SubjectId引用Subject.SubjectId 现在Result表的StudentResult列创建一个索引,查询成绩在85到90的所有记录,请问下面两种写法谁的查询的效率高,谁的速度快?

select StudentName,SubjectName,ExamDate,StudentResult
from Student,Subject,Result
with (index=IX_StudentResult)
where StudentResult between 85 and 90 and Student.StudentNo=Result.StudentNo and Subject.SubjectId=Result.SubjectId


select StudentName,SubjectName,ExamDate,StudentResult
from Result
with(index=IX_StudentResult)
inner join Student on Student.StudentNo=Result.StudentNo
inner join Subject on Subject.SubjectId=Result.SubjectId
where StudentResult between 85 and 90

------解决方案--------------------
差不多吧,都是联合查询,只是表述不同而已,sql2008有对语句执行时间显示,你可以看看2个语句执行以下,看看
------解决方案--------------------
将Sql语句放到查询分析中按Ctrl+L执行就知道哪个效率高了
------解决方案--------------------
可以看一下查询计划,如果计划是一样的,就没什么效率上的差别了。
我感觉是一样的。
------解决方案--------------------

------解决方案--------------------
推荐用第2种写法,
字段Student.StudentNo和Subject.SubjectId上最好有索引.
------解决方案--------------------
建立一个视图进行查询,试试效果