同样一个查询2008比2000慢3倍以上啊???按理应该是2008比2000快才对的啊,而且2008还是X64的,有代码有真相ex
同样一个查询2008比2000慢3倍以上啊???
按理应该是2008比2000快才对的啊,而且2008还是X64的,有代码有真相
exec('select *
,(select top 1 ERP_OrderList.SalePrice from ERP_Order with(nolock) inner join ERP_OrderList with(nolock) on ERP_Order.OrderID=ERP_OrderList.OrderID where ERP_Order.FunctionID=228 and ERP_Order.OrderOddNumber=TempTable.WareStockFree1 and ERP_OrderList.WareID=TempTable.WareID and ERP_OrderList.OrderListFree4=TempTable.CheckOddNumber) as 销售单价
from TempTable where isnull(EndStockNumber,0)<>0')
说明一下各表索引情况:
ERP_Order表ERP_Order.OrderID为主键,ERP_Order.FunctionID+ERP_Order.OrderOddNumber建立了唯一索引
ERP_OrderList表ERP_OrderList.OrderID建立了独立一般索引,ERP_OrderList.WareID+ERP_OrderList.OrderListFree4建立了一般索引
TempTable为临时表,没有任何索引
各表数据量:
TempTable 1万
ERP_Order 10万
ERP_OrderList 200万
在2000该查询耗时20秒内,在15秒左右波动,但升级到2008 X64后,同样一台机里面,数据库一样,耗时却升到60秒以上,谁能解析一下啊,怎么优化一下该查询了,发现2008在索引利用方面反而倒退了,很多查询在2000运行的很好的,升级后就变得很慢了,索引是一样的,非得针对2008优化改动一下索引才勉强和2000差不多,但这个查询不管我怎么建索引,时间就是比2000高3倍以上
[解决办法]这个 SQL 有毛病,TOP 1 没有 ORDER BY,不如用 max 试试