优化SQL Server查询
问题描述:
SELECT TOP 10 dic.item_cd,
dic.item_knm,
dic.item_enm
FROM tbus.dt_item_com dic
INNER JOIN tbus.mfProd mfp ON dic.item_cd LIKE mfp.prodId
INNER JOIN tbus.plu_category plc ON mfp.prodType LIKE plc.plc_prodType
WHERE (dic.item_knm LIKE '%%'
OR (dic.item_enm LIKE '%%')
AND (dic.item_cd NOT IN
(SELECT TOP 0 dic.item_cd
FROM tbus.dt_item_com dic
INNER JOIN tbus.mfProd mfp ON dic.item_cd LIKE mfp.prodId
INNER JOIN tbus.plu_category plc ON mfp.prodType LIKE plc.plc_prodType
WHERE (dic.item_knm LIKE '%%'
OR dic.item_enm LIKE '%%')
ORDER BY dic.item_cd DESC))
ORDER BY dic.item_cd DESC
这是SQL查询我想优化。优化SQL Server查询
什么这个查询的作用是内部连接的项目名称三个表(目前它只是“%%”。这会是像“苹果%%”后面')。而且,因为这是用于分页的,所以它也没有IN语法。
这里的问题是有两个重复的INNER JOIN & WHERE短语 - 一个在NOT IN内部,另一个在外部。我怎样才能消除这种重复的代码,并使其更快:(
(它是基于SQL Server 2000上)
答
我来回答不同的问题(按照注释):如何做分页SQL Server上?您通常使用的行号功能:
select * from (
select *, row_number() over(order by something) r
from T
) x
where r >= 10 and r < 20
然后,你所有的问题消失
你有什么指标 – tomsv 2013-03-18 19:15:16
但这顶0的意思与NOT IN回事呢。???它有特殊的含义吗?你是否试图通过排除做分页? – usr 2013-03-18 19:20:23
dontamaso //遗憾的是,没有数量指标。 Odering item_cd(项目代码)将是方式对其进行索引。 – Raccoon 2013-03-18 19:30:32