速度问题, 条件放在新建Join table里和放在Where里,哪个快?
速度为什么会差这么远?
1> 5秒
declare @UserDefinedId varchar(10)
set @UserDefinedId= 'NA-18% '
select o.orderid,o.partid,orderdt,factoryid,customerid
From Factorynet..Oeborder o
Where o.CommitmentUserDefinedId like UserDefinedId
2> 60秒
declare @UserDefinedId varchar(10)
Create Table #Select_UserDefinedId(OrderId char(6),PartId char(2))
set @UserDefinedId= 'NA-18% '
Insert into #Select_UserDefinedId
Select OrderId,PartId From Oeborder where CommitmentUserDefinedId like @UserDefinedId
select o.orderid,o.partid,orderdt,factoryid,customerid
From Factorynet..Oeborder o
Join #Select_UserDefinedId s on s.orderid=o.order and s.partid=o.partid
------解决方案--------------------第一層
------解决方案--------------------第一个是直接查询速度肯定是快的
-------------------------------
第二个:
创建临时表,插入数据到临时表要耗费一部分时间
连接是逐条匹配
况且你的on后面跟着两个条件
就要匹配2次
如果两个字段都有索引速度会好一点
--------------------------------
个人臆想
哈哈
--------------------------------
建议lz把两个语句用执行计划查看一下
看看执行计划如何
------解决方案--------------------纯JF
------解决方案-------------------- 1> 5秒
declare @UserDefinedId varchar(10)
set @UserDefinedId= 'NA-18% '
select o.orderid,o.partid,orderdt,factoryid,customerid
From Factorynet..Oeborder o
Where o.CommitmentUserDefinedId like UserDefinedId--少了一个@变量符
------解决方案--------------------如果你的执行计划提示index scan性能肯定有点不好
也就是说索引扫描
没有有效地用到索引,简而言之就是:你的索引一点用处也没有
--------------------
如果你的执行计划提示clustered index seek
就是说用到了聚集索引查询
性能会有很大的提高
--------------------
再给lz一个建议
在你查询的所有列上面加索引
也就是通常所说的覆盖索引
也会很有效的提高性能