2014-04-21 49 views
0

我编写了一个SQL查询,这需要花费太多时间来执行。实际上这个查询从数百万条记录中提取记录。请建议我减少SQL查询执行时间的解决方案。查询如下。SQL查询花费太多时间在存储过程中执行(nolock)

SELECT 
    e.emailAddress, em.employeeId 
FROM 
    Email e with (Nolock), employee em with (Nolock) 
WHERE 
    e.emailAddress = em.email 
    AND em.employeeId = @employeeId 
+0

如果您使用'with(Nolock)',那么您正在使用SQL Server。我正在删除mysql标签。 –

+0

检查执行计划并查看问题出在哪里。我猜你在使用非索引表时遇到问题。执行计划可以告诉你。 –

+0

[踢坏的习惯:使用旧式JOIN](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins。 aspx) - 使用ANSI - ** 92 ** SQL标准(超过** 20年前**)废止旧式*逗号分隔的表*样式列表, –

回答

4

首先,最好是写你的查询作为一个明确的join,而不是使用隐式连接语法:

SELECT e.emailAddress, em.employeeId 
FROM Email e with (Nolock) join 
     employee em with (Nolock) 
     ON e.emailAddress = em.email 
WHERE em.employeeId = @employeeId; 

为了使这个查询运行最好的,你想要索引。首先想到的是employee(employeeId, emailaddress)

二,不是这个查询做你想要的吗?

SELECT em.email, em.employeeId 
FROM employee em with (Nolock) 
WHERE em.employeeId = @employeeId; 

对于上述索引,此查询应该运行得非常快。