请教一下,以下的Sql语句怎么优化
请问一下,以下的Sql语句如何优化?
select * from tb_ContractCategory where ProcessNumber = (select ProcessNumber from tb_Contract where OperateType=0 and ContractCode=(select ContractCode from tb_Contract where ProcessNumber='NewContract000030'))
------解决思路----------------------
看看数据是不是一样的,如果是的话,给我看看执行计划,ctrl+M,然后执行这个语句,上图
------解决思路----------------------
我用了一个例子测试了下
效率完全一样。这个是必然还是偶尔?
------解决思路----------------------
select * from tb_ContractCategory where ProcessNumber = (select ProcessNumber from tb_Contract where OperateType=0 and ContractCode=(select ContractCode from tb_Contract where ProcessNumber='NewContract000030'))
------解决思路----------------------
SELECT a.*
FROM tb_ContractCategory a
INNER JOIN ( SELECT ProcessNumber
FROM tb_Contract a
INNER JOIN ( SELECT ContractCode
FROM tb_Contract
WHERE ProcessNumber = 'NewContract000030'
) b ON a.ContractCode = b.ContractCode
WHERE OperateType = 0
) b ON a.ProcessNumber = b.ProcessNumber
看看数据是不是一样的,如果是的话,给我看看执行计划,ctrl+M,然后执行这个语句,上图
------解决思路----------------------
我用了一个例子测试了下
select * from sales.SalesOrderDetail as a
join Sales.SalesOrderHeader as b
on a.SalesOrderID=b.SalesOrderID
where a.SalesOrderID=43659
select * from sales.SalesOrderDetail as a
join Sales.SalesOrderHeader as b
on a.SalesOrderID=b.SalesOrderID
and a.SalesOrderID=43659
select * from (select * from sales.SalesOrderDetail as a where a.SalesOrderID=43659) a
join Sales.SalesOrderHeader as b
on a.SalesOrderID=b.SalesOrderID
效率完全一样。这个是必然还是偶尔?
------解决思路----------------------
select a.* from tb_ContractCategory a
inner join (select ProcessNumber from tb_Contract where OperateType=0 ) b
on a.ProcessNumber=b.ProcessNumber
inner join (select ContractCode from tb_Contract where ProcessNumber='NewContract000030') c
on a.ContractCode = c.ContractCode