Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何优化查询,替换sql查询?_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

如何优化查询,替换sql查询?

如何优化查询,替换sql查询?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个需要更多时间运行的查询。我发现是因为查询中的IN运算符。我需要优化它,请建议 问题是 DECLARE @LevelList TABLE(BadgeNo NVARCHAR(200)) INSERT INTO @LevelList(BadgeNo) EXEC spDataLevelSecurity SIP008548 declare @RetCountValueOUT nvarchar(3) SELECT @RetCountValueOUT = COUNT([Badge No] )

我有一个需要更多时间运行的查询。我发现是因为查询中的IN运算符。我需要优化它,请建议

问题是

DECLARE @LevelList TABLE(BadgeNo NVARCHAR(200))  
INSERT INTO @LevelList(BadgeNo) EXEC spDataLevelSecurity SIP008548 
declare @RetCountValueOUT nvarchar(3)
SELECT  @RetCountValueOUT = COUNT([Badge No] ) FROM (       
        SELECT
            Distinct
            BC.BadgeNo AS [Badge No],
            dbo.ProperCase(FirstName + + ' ' + ISNULL(MiddleName,'') + CASE WHEN ISNULL(MiddleName,'') <> '' THEN ' ' ELSE '' END + ISNULL(LastName,'')) AS [Employee Name],
            ISNULL(Job.BusinessUnit,'') AS [Company],
            ' By ''' + dbo.ProperCase(F1.UserFullName) + ''' On ''' + REPLACE(CONVERT(NVARCHAR(11),CreatedOn,106),' ','-') + '''' AS [Creation Details],
            ' By ''' + dbo.ProperCase(F2.UserFullName) + ''' On ''' + REPLACE(CONVERT(NVARCHAR(11),VerifiedOn,106),' ','-') + '''' AS [Verification Details]
        FROM    
            Componentdetails BC 
        INNER JOIN Job 
            ON Job.BadgeNo = BC.BadgeNo
        INNER JOIN Employee
            ON Employee.BadgeNo = BC.BadgeNo
        LEFT JOIN FalconUsers F1
            ON F1.EmployeeID = BC.CreatedBy 
        LEFT JOIN FalconUsers F2
            ON F2.EmployeeID = BC.VerifiedBy 
        WHERE
            Isverified  = 1
            AND IsApproved = 0
            AND RejectTag = 0
        )A 
where a.[Badge No] in   ( Select BadgeNo from @LevelList )
select @RetCountValueOUT
提前感谢

使用内部连接


可能是因为这个spDataLevelSecurity?我在没有IN运算符的情况下检查了它,它在没有任何时间的情况下运行。我认为问题出在select子句中,您将一些操作应用于列,如dbo.ProperCase、ISNULL、Convert、,Replace…SQLServer在创建计划时始终假定表变量包含1行,因此如果它包含大量行,则可能会使用效率低下的计划。尝试用临时表替换该表变量,并查看它是否有任何差异将左更改为“内部”并删除,而B.BadgeNo为空。OP希望通过@LevelListTorry内部联接中的值筛选行,与中的相同…加载数据都需要14秒
DECLARE @LevelList TABLE(BadgeNo NVARCHAR(200))  
INSERT INTO @LevelList(BadgeNo) EXEC spDataLevelSecurity SIP008548 
declare @RetCountValueOUT nvarchar(3)
SELECT  @RetCountValueOUT = COUNT([Badge No] ) FROM (       
        SELECT
            Distinct
            BC.BadgeNo AS [Badge No],
            dbo.ProperCase(FirstName + + ' ' + ISNULL(MiddleName,'') + CASE WHEN ISNULL(MiddleName,'') <> '' THEN ' ' ELSE '' END + ISNULL(LastName,'')) AS [Employee Name],
            ISNULL(Job.BusinessUnit,'') AS [Company],
            ' By ''' + dbo.ProperCase(F1.UserFullName) + ''' On ''' + REPLACE(CONVERT(NVARCHAR(11),CreatedOn,106),' ','-') + '''' AS [Creation Details],
            ' By ''' + dbo.ProperCase(F2.UserFullName) + ''' On ''' + REPLACE(CONVERT(NVARCHAR(11),VerifiedOn,106),' ','-') + '''' AS [Verification Details]
        FROM    
            Componentdetails BC 
        INNER JOIN
            Job 
        ON
            Job.BadgeNo = BC.BadgeNo
        INNER JOIN
            Employee
        ON
            Employee.BadgeNo = BC.BadgeNo
        LEFT JOIN
            FalconUsers F1
        ON
            F1.EmployeeID = BC.CreatedBy 
        LEFT JOIN
            FalconUsers F2
        ON
            F2.EmployeeID = BC.VerifiedBy 
        WHERE
            Isverified  = 1
        AND
            IsApproved = 0
        AND
            RejectTag = 0
        )A 
        INNER JOIN @LevelList AS B 
        ON a.[Badge No] = B.BadgeNo
select @RetCountValueOUT