2013-10-28 54 views
-3

我有这样的情况下,以一个即时搜索,但此查询有更多未检查如何优化这个存储过程没有加入

ALTER PROC [dbo].[DPR_SP_GetEmployeeDetailsByKeyword] 
@keyword varchar(10), 
@hotelId int 
AS 
BEGIN 
SELECT EmployeeDetails.EmployeeId,EmployeeDetails.SageEmployeeId,EmployeeDetails.FirstName,EmployeeDetails.LastName 
FROM EmployeeDetails 
WHERE (EmployeeDetails.EmployeeId NOT IN ( SELECT EmployeeWorksIn.EmployeeId 
               FROM EmployeeWorksIn 
               WHERE [email protected] 
               ) 
AND 
     EmployeeDetails.EmployeeId LIKE @keyword+'%') 
     OR 
     (EmployeeDetails.EmployeeId NOT IN ( SELECT EmployeeWorksIn.EmployeeId 
               FROM EmployeeWorksIn 
               WHERE [email protected] 
               ) 
     AND 
OR 
     (EmployeeDetails.EmployeeId NOT IN ( SELECT EmployeeWorksIn.EmployeeId 
               FROM EmployeeWorksIn 
               WHERE [email protected] 
               ) 
     AND 
     EmployeeDetails.DateOfBirth LIKE @keyword+'%') 

如何优化这个查询

感谢

+1

当你分析这个,瓶颈在哪里?使用SQL Management Studio,您可以查看执行计划来确定这一点。 – David

回答

1

您CAM改写这个作为

alter proc dbo.DPR_SP_GetEmployeeDetailsByKeyword 
    @keyword varchar(10), 
    @hotelId int 
As 
Select 
    e.EmployeeId, 
    e.SageEmployeeId, 
    e.FirstName, 
    e.LastName 
From 
    EmployeeDetails e 
     Left Outer Join 
    EmployeeWorksIn w 
     on e.EmployeeId = w.EmployeeId and w.HotelId = @hotelId 
Where 
    w.EmployeeID Is Null And (
     e.EmployeeId Like @keyword+'%' Or 
     e.Something Like @keyword+'%' Or -- appears to be missing from question 
     e.DateOfBirth Like @keyword+'%' 
    ); 

后,你将看indexin克来加快速度。