【发布时间】:2009-05-06 19:47:41
【问题描述】:
在大型表上运行 SELECT 的存储过程超时。 where 子句导致超时,因为我只选择另一个表中的城市。
AND city IN (SELECT DISTINCT city from tOH where clientId = @clientId)
AND state IN (SELECT DISTINCT state from tOH where clientId = @clientId)
*注意几乎总是只返回一种状态
我正在尝试将城市放入表中,然后使用该表来填充城市,但我收到了一个错误,即未声明 @cities。
DECLARE @cities TABLE
(
city varchar(200)
);
INSERT INTO @cities (city) SELECT city FROM tOH WHERE clientId = @clientId GROUP BY city
然后我的 where 子句变为
AND city IN (SELECT city from @cities)
谁能找到优化这个存储过程的好方法?
-------------- 更新 ------------------ ------------------
连接都太慢了。我认为带有临时表或表变量的解决方案会起作用。
【问题讨论】:
-
联接通常比临时表快,或者至少有可能是因为它们更好地利用了索引。您需要将连接与适当的索引结合起来。
标签: sql optimization stored-procedures select