日期:2014-05-18  浏览次数:20548 次

速度问题, 条件放在新建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一个建议
在你查询的所有列上面加索引
也就是通常所说的覆盖索引
也会很有效的提高性能