22,210
社区成员
发帖
与我相关
我的任务
分享
SELECT * FROM(
SELECT ROW_NUMBER() OVER(ORDER BY ProductCode) RN,[dbo].get_DeptCodes('A',Product.productcode) as id,[dbo].get_DeptNames('A',Product.productcode) as deptName,
[dbo].get_DeptNames('B',Product.productcode) as deptNameB, ProductCode,ProductName,Packing,Manufacturer,OurPrice,PurchasePrice
,MerchantManageCode,FinancialType FROM
Product(NOLOCK) WHERE ProductCode IN(
SELECT distinct ProductCode FROM OrderProducts(NOLOCK) WHERE OrdersCode IN(
SELECT distinct OrdersCode FROM Orders(NOLOCK) WHERE OrderTime BETWEEN CONVERT(DATETIME, CONVERT(varchar(7), dateadd(mm,-1,getdate()) , 120) + '-1') AND GETDATE()
))
AND 1=1
) TB WHERE TB.RN BETWEEN 1 AND 20
这一段在库中执行时间一般是2秒,我去掉一个in的查询后居然会要16秒这么久。这个是为什么??SELECT * FROM(
SELECT ROW_NUMBER() OVER(ORDER BY ProductCode) RN,[dbo].get_DeptCodes('A',Product.productcode) as id,[dbo].get_DeptNames('A',Product.productcode) as deptName,
[dbo].get_DeptNames('B',Product.productcode) as deptNameB, ProductCode,ProductName,Packing,Manufacturer,OurPrice,PurchasePrice
,MerchantManageCode,FinancialType FROM
Product(NOLOCK) WHERE ProductCode IN(
SELECT distinct ProductCode FROM OrderProducts(NOLOCK) WHERE CreationDate BETWEEN CONVERT(DATETIME, CONVERT(varchar(7), dateadd(mm,-1,getdate()) , 120) + '-1') AND GETDATE()
)
AND 1=1
) TB WHERE TB.RN BETWEEN 1 AND 20
orders表是没有索引的。 OrderProducts和Product表都有索引。去掉了没有索引的表的in居然会更慢。。实在是搞不懂为什吗!
SELECT * FROM(
SELECT ROW_NUMBER() OVER(ORDER BY ProductCode) RN,[dbo].get_DeptCodes('A',Product.productcode) as id,[dbo].get_DeptNames('A',Product.productcode) as deptName,
[dbo].get_DeptNames('B',Product.productcode) as deptNameB, ProductCode,ProductName,Packing,Manufacturer,OurPrice,PurchasePrice
,MerchantManageCode,FinancialType
FROM Product(NOLOCK) x,(SELECT distinct ProductCode FROM OrderProducts(NOLOCK)
WHERE CreationDate BETWEEN CONVERT(DATETIME, CONVERT(varchar(7), dateadd(mm,-1,getdate()) , 120) + '-1') AND GETDATE()) y
WHERE x.ProductCode = y.ProductCode
) TB WHERE TB.RN BETWEEN 1 AND 20
试试这个,看效率怎么样↑SELECT COUNT(*) FROM OrderProducts(NOLOCK) WHERE OrdersCode IN(
SELECT distinct OrdersCode FROM Orders(NOLOCK) WHERE OrderTime BETWEEN CONVERT(DATETIME, CONVERT(varchar(7), dateadd(mm,-1,getdate()) , 120) + '-1') AND GETDATE()
)
SELECT COUNT(*) FROM OrderProducts(NOLOCK) WHERE CreationDate BETWEEN CONVERT(DATETIME, CONVERT(varchar(7), dateadd(mm,-1,getdate()) , 120) + '-1') AND GETDATE()