Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Server中如何减少查询执行时间?

在Server中如何减少查询执行时间?
EN

Stack Overflow用户
提问于 2022-04-20 11:44:59
回答 1查看 207关注 0票数 0

我在查询中使用的表包含很多记录。从数据库中提取记录需要超过1分钟。我正在使用组和外部应用两者。有人能帮我如何优化查询,以便减少执行时间吗?

存储过程查询:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DECLARE @BankAccount NVARCHAR(200) = NULL,  
        @Bank NVARCHAR(100) = NULL,  
        @AccountType NVARCHAR(200) = NULL,  
        @Status NVARCHAR(100) = NULL,  
        @Agent NVARCHAR(100) = NULL,  
        @Month NVARCHAR(100) = NULL,  
        @FromDate DATETIME ='2000-01-01',  
        @ToDate DATETIME = '2022-01-01',
    
        @pagenumber INT = 1,  
        @pagesize INT = 20
    
BEGIN
    DECLARE @IsMonthNull INT = 0, 
            @recordExistInPrevMonth INT = 0, 
            @isPreviousMonth DATETIME = NULL;
    
    SELECT 
        rslt.TotalRows,
        rslt.BRSAccountID,
        rslt._AccountNumber,
        rslt.OpeningBalance, 
        rslt.Credits, 
        rslt.Debits, 
        rslt.ClosingBalance, 
        rslt.DateRangeFrom, 
        rslt.DateRangeTo,
        rslt._Bank,
        rslt._Agent 
    FROM
        (SELECT 
             COUNT(bt.AccountNumber) OVER() TotalRows, 
             ROW_NUMBER() OVER (ORDER  BY bt.AccountNumber ASC) AS RowNumber,
             bt.BRSAccountID,
             bt.AccountNumber AS _AccountNumber,
             CAST((CASE
                       WHEN @IsMonthNull = 1 
                           THEN ISNULL(BankTransactionOpngBalance.OpeningBalance, 0) 
                           ELSE ISNULL(Opng.OpeningBalance, 0)
                   END) AS VARCHAR(MAX)) OpeningBalance,  
             CAST(cdt.Credits AS varchar(max)) AS Credits,
             CAST(dbt.Debits AS varchar(max)) AS Debits,  
             CAST((CASE 
                       WHEN ISNULL(Clsg.ClosingBalance, 0) = 0 
                           THEN ClsgNew.ClosingBalance  
                       WHEN @IsMonthNull = 1 
                           THEN ISNULL(ClsgNew.ClosingBalance, 0) 
                       ELSE Clsg.ClosingBalance 
                   END) AS VARCHAR(MAX)) ClosingBalance,   
             CAST(@FromDate AS VARCHAR(MAX)) DateRangeFrom,
             CAST(@ToDate AS VARCHAR(MAX)) DateRangeTo,
             bt.Bank As _Bank,
             CAST(ISNULL((SELECT TOP 1 ag.AssignedAgent AS AssignedAgent  
                          FROM RecConfig ag 
                          WHERE ag.BRSAccountID = bt.BRSAccountID), 0) AS varchar(max)) AS _Agent
         FROM 
             BankTransaction as bt
         INNER JOIN 
             BankAccountsReconciliation rec ON bt.BRSAccountID = rec.BRSAccountID  
                                            AND bt.AccountNumber = bt.AccountNumber
         OUTER APPLY 
             (SELECT TOP 1 BankBalance AS OpeningBalance   
              FROM BankPeriodEndBalance bal  
              WHERE bal.BRSAccountId = bt.BRSAccountID 
                AND CAST(bal.PeriodEndDate AS DATE) >= CAST(@FromDate AS DATE) 
                AND CAST(bal.PeriodEndDate AS DATE) <= CAST(@ToDate AS DATE)  
              ORDER BY bal.PeriodEndDate DESC) Opng  
         OUTER APPLY
             (SELECT TOP 1 bnkTrans.Closing_Balance AS OpeningBalance   
              FROM BankTransaction bnkTrans  
              WHERE bnkTrans.BRSAccountId = bt.BRSAccountID 
                AND CAST(bnkTrans.Date AS DATE) < CAST(@FromDate AS DATE)   
              ORDER BY bnkTrans.Date  DESC) BankTransactionOpngBalance 
         OUTER APPLY  
             (SELECT SUM(bnkt.Amount) AS Credits 
              FROM BankTransaction bnkt  
              WHERE bnkt.Debit_Credit = 'CR' 
                AND bnkt.BRSAccountID = bt.BRSAccountID  
                AND CAST(bnkt.Date AS DATE) >= CAST(@FromDate AS DATE) 
                AND CAST(bnkt.Date AS DATE) <= CAST(@ToDate AS DATE)) cdt
         OUTER APPLY 
             (SELECT SUM(bnkt.Amount) AS Debits 
              FROM BankTransaction bnkt  
              WHERE bnkt.Debit_Credit = 'DR' 
                AND bnkt.BRSAccountID = bt.BRSAccountID  
                AND CAST(bnkt.Date AS DATE) >= CAST(@FromDate AS DATE) 
                AND CAST(bnkt.Date AS DATE) <= CAST(@ToDate AS DATE)) dbt
         OUTER APPLY 
             (SELECT TOP 1 BankBalance AS ClosingBalance 
              FROM BankPeriodEndBalance bal  
              WHERE bal.BRSAccountId = bt.BRSAccountID 
                AND CAST(bal.PeriodEndDate AS DATE) <= CAST(@ToDate AS DATE) 
                AND CAST(bal.PeriodEndDate AS DATE) >= CAST(@FromDate AS DATE)  
              ORDER BY bal.PeriodEndDate DESC) Clsg  
         OUTER APPLY 
             (SELECT TOP 1 bal.Closing_Balance AS ClosingBalance 
              FROM BankTransaction bal  
              WHERE bal.BRSAccountId = bt.BRSAccountID 
                AND CAST(bal.Date AS DATE) <= CAST(@ToDate AS DATE) 
                AND CAST(bal.Date AS DATE) >= CAST(@FromDate AS DATE)  
              ORDER BY bal.date DESC) ClsgNew 
         WHERE  
             bt.AccountNumber  = ISNULL(@BankAccount, bt.AccountNumber) 
             AND CAST(bt.Date AS DATE) <= CAST(@ToDate AS DATE) 
             AND CAST(bt.Date AS DATE) >= CAST(@FromDate AS DATE) 
             AND (LEFT(bt.BSB, 2) = ISNULL(@Bank, LEFT(bt.BSB, 2))) 
             AND rec.Status = ISNULL(@Status, rec.Status)
             AND rec.AccountTypeId = ISNULL(@AccountType, rec.AccountTypeId)
         GROUP BY
             bt.AccountNumber, bt.BRSAccountID, 
             BankTransactionOpngBalance.OpeningBalance, 
             Opng.OpeningBalance, cdt.Credits, dbt.Debits,
             clsg.ClosingBalance, ClsgNew.ClosingBalance, bt.Bank) rslt
    WHERE 
        ((@Agent Is NOT NULL AND _Agent = @Agent) OR @Agent IS NULL) 
        AND RowNumber BETWEEN ((@pagenumber-1) * @PageSize) + 1 AND((@pagenumber-1) * @PageSize) + 1 + @PageSize -1 
     OPTION (RECOMPILE)
END

上面的查询工作正常,但有时需要超过2分钟。

EN

回答 1

Stack Overflow用户

发布于 2022-04-20 11:49:45

使用索引显着减少了执行时间。索引实现了b树算法,减少执行时间的缺点是需要额外的空间和几秒钟来构建索引。插入、删除也可能需要更长时间,但查询要快得多。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71945387

复制
相关文章
在 TS 中如何减少重复代码
相信有些读者已经听说过 DRY 原则,DRY 的全称是 —— Don’t Repeat Yourself ,是指编程过程中不写重复代码,将能够公共的部分抽象出来,封装成工具类或者用抽象类来抽象公共的东西,从而降低代码的耦合性,这样不仅提高代码的灵活性、健壮性以及可读性,也方便后期的维护。
阿宝哥
2020/05/06
2.3K0
在类中如何使用 Server.MapPath
直接在类中使用 Server.MapPath 会出现错误,这是由于类中不能直接使用 System.Web.UI.Page 的非静态函数造成的。解决方法有两种:
全栈程序员站长
2022/09/14
2.5K0
在XCode中如何使用高级查询
对于一个框架来说,仅有基本的CURD不行,NewLife.XCode同时还提供了一个非常宽松的方式来使用高级查询,以满足各种复杂的查询需求。 (本文同样适用于其它任何数据访问框架) 先上图看一个复杂查询的效果图: image.png 这里有8个固定的查询条件和1个模糊查询条件,加上多表关联(7张表)、分页、统计,如果用传统的做法,这个查询会非常的复杂。 这个页面有XCode实现,核心查询部分共100多行代码,包括一个查询、一个总记录数分页、两个统计(就是业绩、提成等的统计),看看高级查询代码: image
大石头
2018/01/15
5K0
在XCode中如何使用高级查询
在 Docker 中如何高效部署 Node Server
一个高效合理的部署方案,不仅能够实现快速升级,滚动更新,负载均衡,应用隔离等部署特性,而且配有一套成熟稳定的监控。
山月
2021/09/07
7280
在EF中,如何实现模糊查询?
【摘要】我们知道在sql中,可以通过like方法实现模糊查询。而在EF中,我们通常使用Lambda表达式实现各种复杂的数据查询,那么,类似于sql的like方法如何实现呢?
高一峰
2020/09/22
4.4K0
在EF中,如何实现模糊查询?
python程序执行时间_用于在Python中查找程序执行时间的程序
The execution time of a program is defined as the time spent by the system to execute the task. As we all know any program takes some execution time but we don't know how much. So, don't worry, in this tutorial we will learn it by using the datetime module and also we will see the execution time for finding the factorial of a large number. A large number will be provided by the user and we have to calculate the factorial of a number, also we have to find the execution time of the factorial program. Before going to write the Python program, we will try to understand the algorithm.
用户7886150
2021/01/28
2K0
如何减少B2主题首页的查询次数?
安装好B2主题后,我们会在网站的底部看到网站的查询次数,网站的查询次数直接影响网站的加载速度,理论上讲,减少网站首页的查询次数,可以提高网站的访问速度。
小狐狸说事
2022/11/17
5650
如何减少B2主题首页的查询次数?
SQL Server SQL性能优化之--pivot行列转换减少扫描计数优化查询语句
先看常用的一种表结构设计方式: 那么可能会遇到一种典型的查询方式,主子表关联,查询子表中的某些(或者全部)Key点对应的Value,横向显示(也即以行的方式显示) 这种查询方式很明显的一个却显示多次对
逸鹏
2018/04/11
1.9K0
SQL Server SQL性能优化之--pivot行列转换减少扫描计数优化查询语句
在eclipse中没有server(需在选项中设置)
①在软件eclipse下的Help->InstallNew Software->中,在Work with中点击Add,如下,加入
全栈程序员站长
2022/07/25
3.9K0
在eclipse中没有server(需在选项中设置)
如何减少开发中的 Bug
http://jartto.wang/2019/08/24/how-to-decrease-bugs/
前端老道
2020/06/27
8910
如何减少开发中的 Bug
在Windows Server 2016 中启用 Flash
最近在部署测试VMware Horizon,其控制台默认需要Flash,但是Windows Server 2016默认没有启用Flash,在原来Windows Server 2012的时候,我们可以通过安装“桌面体验”功能来启用Flash,但此功能在Windows Server 2016中消失了。
SuperDream
2019/02/28
1.7K0
SQL SERVER 查询死锁
USE master go CREATE PROCEDURE [dbo].[sp_who_lock] AS      BEGIN         DECLARE @spid INT ,             @bl INT ,             @intTransactionCountOnEntry INT ,             @intRowcount INT ,             @intCountProperties INT ,             @intCounter I
跟着阿笨一起玩NET
2018/09/18
1.7K0
SQL Server 多表查询
前几天开始研究维护SQL Server,因为学校自己的教育系统非常烂,而且他们公司维护客服也非常坑爹。所以我就开始研究自己维护SQL Server而不是一有事情就找他们付费弄。
繁华是客
2023/03/03
7310
sql server递归查询
-----------------------------------------------
跟着阿笨一起玩NET
2018/09/20
2K0
sql server递归查询
DC电源模块在传输过程中如何减少能量的损失
DC电源模块是电子设备中常见的电源转换器,它可以将交流电转换成稳定的直流电,并且具有高效能、低功耗、可控性强等优点。在DC电源模块传输过程中,由于电能的转换过程中会产生一定的能量损失,因此如何减少能量损失,提高转换效率成为一个重要的问题。
河北稳控科技
2023/08/28
2090
DC电源模块在传输过程中如何减少能量的损失
hibernate sql查询_sql server查询命令
SQLQuery接口用于接受一个sql语句进行查询,然后调用list()或uniqueResult()进行查询。但是sql语句不会直接封装到实体对象里,需要手写代码才可以封装到实体中。
全栈程序员站长
2022/11/11
2.7K0
聊聊日常开发中,如何减少bug呢?
大家好呀~ 我是捡田螺的小男孩,今天跟大家聊聊日常开发中,如何减少bug?本文将从数据库、代码层面、缓存使用篇3个大方向,总结出一共50多个注意点,助大家成为开发质量之星。
捡田螺的小男孩
2021/07/19
9450
如何减少铣削过程中的振动?
在铣削中,可能因切削刀具、刀柄、机床、工件或夹具的局限性而产生振动。要减少振动,需要考虑一些策略。
UG数控编程
2020/03/03
1.1K0
如何减少铣削过程中的振动?
如何利用 SpringBoot 在 ES 中实现类似连表的查询?
那么问题来了,我们如何在后端通过技术方式快速的实现 es 中内嵌对象的数据查询呢?
Java极客技术
2022/12/04
4.7K0
Java编程中如何减少bug的出现次数!
Java编程语言在IT行业毋庸置疑是企业中不可缺少的,现今企业招收大量Java人才,从Web应用到Android应用,这款语言已经被广泛用于开发各类应用及代码中的复杂功能。
Java程序猿
2021/06/11
1K0

相似问题

如何减少查询的执行时间?

11

如何减少子查询执行时间?

21

如何减少查询执行时间MySql

23

如何使用JPQL查询减少查询执行时间

115

减少WMI查询执行时间

34
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文