【发布时间】:2017-05-05 00:50:25
【问题描述】:
假设我有 2 张桌子,TblA 和 TblB。 TblA 每月有数百万条记录,而 TblB 有产品的详细信息。
哪个查询会更快:
select
t1.*, t2.name
from
TblA as t1
left join
TblB as T2 on t1.idProduct = t2.idProduct
where
t1.month = 6
或者这个:
select
t1.*, t2.name
from
(select * from tblA where month = 6) as t1
left join
TblB as t2 on t1.idProduct = t2.idProduct
我的猜测是第二个会更快,因为我在进行左连接之前只预先选择了我想要的月份。
在进行左连接之前,数据库系统是否预先构建来处理 where 子句?
谢谢!
【问题讨论】:
-
运行它们并找出答案?
-
为什么不分别运行几次,看看哪个更快?
-
到目前为止,我们的表中只有一个月。
-
当你有更多的月份时,一个可能会突然跑得比另一个快。或者它们可能总是以相同的方式运行,因为查询计划器认识到它们是同一事物。看看并理解查询计划。
-
您至少应该标记您正在使用的 DBMS(sql-server、oracle、mysql 等)。此外,几乎所有 rdbms 系统都有查询计划。使用查询计划不仅可以比较查询,还可以比较服务器选择执行它们的方式。在此基础上,您可以优化查询并创建可能对提高效率很有必要的索引对象。
标签: sql left-join where database-performance