Оптимизировать хранимую процедуру SQL - PullRequest
0 голосов
/ 06 мая 2009

Хранимая процедура, которая запускает 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) 

Может кто-нибудь найти хороший способ оптимизации этой хранимой процедуры?

---------------------------- ОБНОВЛЕНИЕ ------------------ ------------------

Соединения слишком медленные. Я думаю, что решение с временной таблицей или табличной переменной будет работать.

Ответы [ 12 ]

0 голосов
/ 07 мая 2009

В ответ на вашу проблему того, почему @cities как табличная переменная может не работать, вы не показали остальную часть sp, но я буду где-нибудь, где вы создаете дюнамный SQL и выполняете его. Это будет вне области видимости ранее существующей табличной переменной.

0 голосов
/ 06 мая 2009
select ....
from ....
    inner join tOH ON ...city=tOH.city and ...state=tOH.state
where ... and tOH.clientId = @clientId
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...