以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  SQL查询加索引优化速度  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=164197)

--  作者:漂亮美眉vszh
--  发布时间:2021/4/29 10:45:00
--  SQL查询加索引优化速度

老师,这个存储过程在数据库内执行是0.1秒都不到,绑到窗口上,耗时7秒多,会卡,

数据库上加了索引,索引去掉了排序

CREATE INDEX OrderMainIndex
ON OrderMain([_Identify],[Cl_PurSaleMold],[Order_ID])

但查询依旧很慢,数据量大后,会比较卡

 

Dim Cmt As String = Args(0)  \'存储过程名
Dim Cmt_c As String = Args(1)  \'传入的存储过程参数
Dim Tbnm As String = Args(2)  \'生成接收表名
Dim FTbnm As Table = Args(3)  \'查找表名表头
Dim cmd As new SQLCommand
cmd.Connection Name = "数据库名"
cmd.CommandText = Cmt
cmd.StoredProcedure = True
If Cmt_c <> "" Then
cmd.Parameters.Add("@_IDNo",Cmt_c)
End If
Tables(Tbnm).DataSource  = cmd.ExecuteReader()
Tables(Tbnm).AutoSizeCols()


--  作者:漂亮美眉vszh
--  发布时间:2021/4/29 10:46:00
--  
是SQL语句中去掉了排序,不是索引去掉了,
--  作者:漂亮美眉vszh
--  发布时间:2021/4/29 10:49:00
--  

Tables(Tbnm).UseVisualStyle = False
DataTables(Tbnm).SysStyles("EmptyArea").BackColor = Color.White

我发现又加了这些语句,打开窗口长达15秒多,


--  作者:有点蓝
--  发布时间:2021/4/29 10:59:00
--  
查询本身应该不费事,返回的数据多吧,如果还是远程数据库,数据量越大肯定就越慢,慢在网络传输上。在数据库里查询不涉及到数据传输的。
--  作者:漂亮美眉vszh
--  发布时间:2021/4/29 15:19:00
--  
以下是引用有点蓝在2021/4/29 10:59:00的发言:
查询本身应该不费事,返回的数据多吧,如果还是远程数据库,数据量越大肯定就越慢,慢在网络传输上。在数据库里查询不涉及到数据传输的。

是的,是远程数据库


--  作者:漂亮美眉vszh
--  发布时间:2021/4/29 15:20:00
--  

有没方法,得到的表分页加载过去


--  作者:有点蓝
--  发布时间:2021/4/29 16:01:00
--  
在存储过程里使用Row_Number分页,把页码,条数传入存储过程,类似:http://www.foxtable.com/webhelp/topics/2721.htm
--  作者:漂亮美眉vszh
--  发布时间:2021/4/29 16:54:00
--  

老师,再问下,照例子加了一个Row_Number,可外面再套了一个SELECT就报错呢,单独测也没问题


图片点击可在新窗口打开查看此主题相关图片如下:111.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:222.png
图片点击可在新窗口打开查看


--  作者:有点蓝
--  发布时间:2021/4/29 17:01:00
--  
没有套对,把原sql发上来
--  作者:漂亮美眉vszh
--  发布时间:2021/4/29 18:24:00
--  
se lect * from (Se lect  Row_Number() Over(Order by [_Identify]) As RowNum,*,round(([ResultMoney] - 开票金额),2) as 未开票金额,round(([ResultMoney] - 收款金额),2) as 未收款金额 From
 ([dbo].[OrderMain] a left join (se lect Order_ID,round(SUM([TotalTax]),2) as 开票金额 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 ORDER BY Order_Date desc) as aaa WHERE Row_Number >= 1 And Row_Number <= 10