C# SQL查询耗时较长

C# SQL查询耗时较长,c#,sql-server-2008,stored-procedures,ado.net,C#,Sql Server 2008,Stored Procedures,Ado.net,我正在尝试从C应用程序在SQLServer2008上执行存储过程。这需要很多时间,而且我的应用程序没有响应。我的存储过程: ALTER PROCEDURE [dbo].[PROC066] @date_1 date, @date_2 date AS SELECT RTRIM(tt1.[Org]) as 'Org', RTRIM(tt1.[CustomerHQ]) as 'Customer', RTRIM(tt1.[Customer]) as 'ShipTo', RTRIM(tt1.[Date]

我正在尝试从C应用程序在SQLServer2008上执行存储过程。这需要很多时间,而且我的应用程序没有响应。我的存储过程:

ALTER PROCEDURE [dbo].[PROC066]
@date_1 date,
@date_2 date
AS
SELECT
RTRIM(tt1.[Org]) as 'Org', 
RTRIM(tt1.[CustomerHQ]) as 'Customer',
RTRIM(tt1.[Customer]) as 'ShipTo', 
RTRIM(tt1.[Date]) as 'Date', 
RTRIM(tt2.Clean) as 'Clean', 
RTRIM(tt1.[PO number]) as 'PONumber',
RTRIM(tt1.[GCAS]) as 'GCAS',
'Description' = (SELECT DISTINCT [Description] FROM tDeploymentDB WHERE tDeploymentDB.[Item Code] = tt1.[GCAS]),
RTRIM(tt1.NQTY) as 'NQTY',
RTRIM(tt1.[Dummy]) as 'Dummy', 
RTRIM(tt1.[MOQ]) as 'MOQ', 
RTRIM(tt1.[Inactive]) as 'Inactive', 
RTRIM(tt1.[Allocation]) as 'Allocation', 
RTRIM(tt1.[MultiSector]) as 'MultiSector',
RTRIM(tt2.Pallet_Checked) as 'FullPallets',
RTRIM(tt2.FullTruck_Checked) as 'Full_Truck',
FROM tCleanOrderTracking_prod as tt1, tCleanOrderTracking_HDR_prod as tt2
WHERE 
SUBSTRING(RTRIM(tt1.[PO number]), 6, LEN(RTRIM(tt1.[PO number])) - 5) = 
RTRIM(tt2.CustomerOrderNumber) AND 
tt1.[Date] = @date_1 AND tt1.[Date] <= @date_2
ORDER BY Org, [PO Number]
没有结果!查询tCleanOrderTracking_prod中的主表大约有40500条记录。我还能试试别的吗?我做错了什么?

看一看,它将向您展示如何分析自己的SQL查询,并改进速度和执行性能

您希望在查询中运行它,并查看它是如何执行的,以便可以添加索引/更改连接等


Trim函数也是一个计算开销很大的函数,它不仅是一个从行中选择的函数,而且是一个处理命令。在40000上运行它可能需要相当大的成功。考虑只在你需要的列上做,在插入的时候做,不选择时间,然后做一次,而不是一百万次;P> > P>您应该考虑从选择查询中删除修剪功能。要做到这一点,SQL Server需要付出大量的努力。您应该在插入值之前对其进行修剪。

从where条件中删除修剪函数,因为在执行时首先对所有行应用函数,然后在执行where条件后应用函数,这样会影响性能。

John Mitchell我真的很感谢您。给你的那篇文章很有用。
tt1.[Date] = @date_1 AND tt1.[Date] <= @date_2
tt1.[Date] BETWEEN @date_1 AND @date_2