例如查询语句
select * from classTable t1
left join studentTable t2 on t1.Id=t2.classId
where t1.Id=1 and t2.sex='男'
请问:这个查询语句执行的过程,是要把表classTable,studentTable中所有的数据全部加载到内存中再进行笛卡尔积,on过滤,where过滤吗?表数据量很大的话岂不是很废,而且这样的话索引还有什么用?
如果不是的话,又是怎么取得的数据呢!怎么都理不清,请大牛帮忙!
不同的数据库其查询方式不一样。
这哥们想问啥。?
如果你用的是SqlServer 可以选中这段SQL,然后Ctrl + L ,就可以看到它运行的逻辑了
顺序是 先用Where过滤,然后是JOIN ,最后Select
你可以去看看《Microsoft SQL Server 2008技术内幕:T-SQL查询》的“第一章 逻辑查询处理”
其实我已经看了2005的第一章了,2008没找到。就是因为看了这个,才知道是先join再where的,果然还是要加载所有的数据到内存中去么?而且还是先join再on。
1,先把T1 数据查出来
2.再把T2符合条件的数据查出来
3.在前两部查询的结果集里在查处符合where条件的数据
希望对你有帮助