读书人

速度有关问题, 条件放在新建Join tabl

发布时间: 2012-01-13 22:43:29 作者: rapoo

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

读书人网 >SQL Server

热点推荐