skystore 2018-09-17 08:49 采纳率: 0%
浏览 4923

ROW_NUMBER() OVER(order by ) 多表分页查询,查询速度比较慢,怎么解决?

例:select * from(
select , ROW_NUMBER() OVER(order by t1.photo_keyName desc) as Row from
(select table1.
,table2.car_id,table3.photo_keyName from table1 inner join table2 on table1.DS_Lack=1 and table1.DS_CarNum = table2.car_no left join table3 on table2.car_id=table3.type_id)as t1
) as t2
where t2.Row between 1 and 10

实际查询语句中,会有计算字段,会用到union, 最终查一个30条的结果集,要2,30 秒以上;

查询语句:
SELECT
TOP 20 *
FROM
(
SELECT
ROW_NUMBER () OVER (ORDER BY t.JieAnDate Desc) RowNumber, * from (Select A.PId, A.SaleNo, A.ProductName, A.SizeModel, A.CodeName, A.MethodDesc, A.Period, A.Price, A.SamNum,
A.OtherFee, Convert(numeric(12,2),ISNULL((Case when K.Pref_Price is not null Then K.Pref_Price WHEN K.Pref_Price IS NULL THEN B.Pref_Price end),0)) TestFee, A.State,
(Case when A.JieAnDate is not null Then A.JieAnDate WHEN A.JieAnDate IS NULL THEN B.AppointmentTestDate end) JieAnDate,
A.JieAnUser, A.AddressNo, A.Memo, A.JiaoFuMemo, A.Fee_Price_Number, FB1,
H.CustNameCn CustName,'未确认收入' StateName,(Case when K.ItemNo is not null Then K.ItemNo WHEN K.ItemNo IS NULL THEN A.SaleNo end) ItemNo,
Round(Convert(numeric(12,2),(Convert(numeric(12,5),ISNULL((Case when K.Pref_Price is not null Then K.Pref_Price WHEN K.Pref_Price IS NULL THEN B.Pref_Price end),0))*Convert(numeric(12,5),IsNull(B.Per,1)))),4) Price_RMB
From (
SELECT *,'' sequence FROM CRM_Sale_Order_Info WHERE SaleNo in (select SaleNo from CRM_Sale_Price_Info where DataType!='2')
union
select * from (select * , row_number() over(partition by saleNo order by PID) as sequence from CRM_Sale_Order_Info where SaleNo in (select SaleNo from CRM_Sale_Price_Info where DataType='2') ) FA where sequence =1) A
left join CRM_Sale_Price_Info B on A.SaleNo=B.SaleNo
Left Join CRM_KaiAn_Info K On A.PId=K.OrderCode
Left Join LIMS_Sale_Cust_Info H On B.CustId=H.CustId
Left Join LIMS_Sale_Cust_Contact I On B.ContactId=I.ContactId
Left Join LIMS_Sys_UserInfo J On B.UserId=J.UserId
Where A.State=10
And A.PId Not In (Select OrderCode From CRM_CaiWu_QueRen) And ISNULL(B.DataType,'1') in ('1','2')) t) queryA
WHERE
queryA.RowNumber > (1 - 1) * 20

  • 写回答

1条回答 默认 最新

  • zqbnqsdsmd 2018-09-17 18:28
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 如何实验stm32主通道和互补通道独立输出
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题