asp.net - SQL MAX() 函数很慢,有没有更好的方法?

标签 asp.net sql sql-server max min

我有一个 SQL 数据库和 ASP.NET Web 应用程序,我的大部分查询都涉及 SQL max 函数。

例如,下面的查询需要大约。在 ASP.NET 网站和 SSMS 上执行 36 秒(使用探查器时)。

SELECT MAX(CONVERT(FLOAT,ISNULL(Runhrs,Runho))) - 
       MIN(CONVERT(FLOAT,ISNULL(Runhrs,Runho))) AS ACTUALHOURSRUN 
FROM REPORTINGSYSTEM.DBO.HL_LOGS 
WHERE ID_LOCATION = @ID_LOCATION AND 
       CONVERT(VARCHAR,TIME_STAMP,102) 
       BETWEEN @STARTDATE AND @ENDDATE

有问题的表有大约。 5,000,000 条记录和 45 列。

执行查询以减少执行时间的最好/最快/最有效的方法是什么?

提前致谢...

最佳答案

ID_LOCATION 和 TIME_STAMP 上的索引是一个不错的选择。

但是,当您将 TIME_STAMP 字段转换为 VARCHAR 时,这将阻止它使用索引。相反,重新处理查询以消除执行 CONVERT 的需要,而是使用 DATETIME 值。

例如

SELECT MAX(CONVERT(FLOAT,ISNULL(Runhrs,Runho))) - MIN(CONVERT(FLOAT,ISNULL(Runhrs,Runho))) AS ACTUALHOURSRUN 
FROM REPORTINGSYSTEM.DBO.HL_LOGS 
WHERE ID_LOCATION = @ID_LOCATION AND TIME_STAMP >= @STARTDATE AND TIME_STAMP < @ENDDATE

确保@STARTDATE 和@ENDDATE 也是 DATETIME 参数(我假设这是 TIME_STAMP 列的数据类型)

我还想问 Runhrs/Runho 列是什么数据类型?如果还没有存储为 FLOAT/DECIMAL,那么它们就不能像最合适的数据类型那样存储吗?

关于asp.net - SQL MAX() 函数很慢,有没有更好的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15114541/

相关文章:

mysql - 按组计算 SQL 中的百分比

c# - 在回发时打开新窗口

sql - 在 Ubuntu 上创建用户 postgres

sql - 如何在动态SQL查询中设置表名?

sql - 从 JSON 动态检索相关数据并通过 Azure 数据工厂复制到 SQL 表

c# - SQL 数据库中的单选按钮值

c# - 如何防止用户在使用后退按钮成功登录后返回登录页面

c# - ASP.Net C# MVC EditorFor Template 未从主 Razor View 调用

c# - 在 TreeView 控件中隐藏节点

c# - 使用Enterprise库将数据插入SQL Server数据库的代码