Foxtable(狐表)用户栏目专家坐堂 → SQL查询加索引优化速度


  共有4506人关注过本帖树形打印复制链接

主题:SQL查询加索引优化速度

帅哥哟,离线,有人找我吗?
有点蓝
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111427 积分:567211 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/4/29 10:59:00 [显示全部帖子]

查询本身应该不费事,返回的数据多吧,如果还是远程数据库,数据量越大肯定就越慢,慢在网络传输上。在数据库里查询不涉及到数据传输的。

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111427 积分:567211 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/4/29 16:01:00 [显示全部帖子]

在存储过程里使用Row_Number分页,把页码,条数传入存储过程,类似:http://www.foxtable.com/webhelp/topics/2721.htm

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111427 积分:567211 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/4/29 17:01:00 [显示全部帖子]

没有套对,把原sql发上来

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111427 积分:567211 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/4/29 20:25:00 [显示全部帖子]

se lect * from (Se lect  Row_Number() Over(Order by [_Identify]) As RowNum,*,round(([ResultMoney] - 开piao金额),2) as 未开piao金额,round(([ResultMoney] - 收款金额),2) as 未收款金额 From
 ([dbo].[OrderMain] a left join (se lect Order_ID,round(SUM([TotalTax]),2) as 开piao金额 from [dbo].[InvoDetailed] GROUP BY [Order_ID]) b
  on a._Identify = b.Order_ID) left join (se lect Order_ID,SUM([AmountPay]) as 收款金额 from [dbo].[ReExpend] GROUP BY [Order_ID]) c
  ON a._Identify = c.Order_ID where a.Cl_PurSaleMold = 1) as aaa WHERE Row_Number >= 1 And Row_Number <= 10 
 ORDER BY Order_Date desc

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111427 积分:567211 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/4/30 11:22:00 [显示全部帖子]

多了一个括号,自己排版代码检查

se lect * from 
  (
  Se lect  Row_Number() Over(Order by [_Identify]) As RowNum,*,round(([ResultMoney] - 开piao金额),2) As 未开piao金额,round(([ResultMoney] - 收款金额),2) As 未收款金额 
    From [dbo].[OrderMain] as a 
        left join (se lect Order_ID,round(SUM([TotalTax]),2) As 开piao金额 from [dbo].[InvoDetailed] GROUP BY [Order_ID]) As b on a.[_Identify] = b.Order_ID 
        left join (se lect Order_ID,SUM([AmountPay]) As 收款金额 from [dbo].[ReExpend] GROUP BY [Order_ID]) As c ON a.[_Identify] = c.Order_ID 
    where a.Cl_PurSaleMold = 1
  ) As aaa 
  WHERE Row_Number >= 1 And Row_Number <= 10  ORDER BY Order_Date desc

另外_Identify要加上中括号

最后还是提醒一下,尽量不要使用自增主键_Identify做业务关联,以后换服务器做数据迁移,不小心的话可能会撞大彩

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111427 积分:567211 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/4/30 14:42:00 [显示全部帖子]

*号改为指定具体的列

Se lect  Row_Number() Over(Order by [_Identify]) As RowNum,a.列1,a.lie2,b.列3,round(([ResultMoney] - 开piao金额),2) As 未开piao金额,round(([ResultMoney] - 收款金额),2) As 未收款金额 

 回到顶部