Как оптимизировать запрос? T-SQL - PullRequest
0 голосов
/ 02 июня 2011

Этот запрос работает около 3 минут и возвращает 7279 строк:

SELECT identity(int,1,1) as id, c.client_code, a.account_num, 
        c.client_short_name, u.uso, us.fio, null as new, null as txt 
INTO #ttable
FROM accounts a INNER JOIN Clients c ON 
    c.id = a.client_id INNER JOIN Uso u ON c.uso_id = u.uso_id INNER JOIN 
    Magazin m ON a.account_id = m.account_id LEFT JOIN Users us ON 
    m.user_id = us.user_id
WHERE m.status_id IN ('1','5','9') AND m.account_new_num is null 
    AND u.branch_id = @branch_id
ORDER BY c.client_code;

Тип поля 'client_code' - VARCHAR (6).

Можно ли как-то оптимизировать этот запрос?

Ответы [ 4 ]

1 голос
/ 02 июня 2011

Вставьте записи во временную таблицу без использования Order by Clause , а затем сортируйте их, используя код c.client_code Надеюсь, это поможет вам.

Создать таблицу #temp ( твои колонки ... )

и Вставить записи в эту таблицу Без использования Order by Clause . Теперь запустите select с помощью Order by Clause

0 голосов
/ 02 июня 2011
  1. Убедитесь, что в каждом поле, используемом в JOIN и в предложении WHERE, есть индекс
  2. Если одна из выбранных вами таблиц фактически является представлениями, проблема может заключаться в производительности этих представлений.
0 голосов
/ 02 июня 2011

Всегда старайтесь перечислять таблицы раньше, если на них есть ссылки в предложении where - это сокращает комбинации строк как можно раньше. В этом случае таблица Magazin имеет некоторые предикаты в предложении where, но указана далеко внизу в списке таблиц. Это означает, что все остальные объединения должны быть сделаны до строк журнала, которые можно отфильтровать - возможно, миллионы дополнительных строк.

Попробуйте это (и дайте нам знать, как все прошло):

SELECT ... 
INTO #ttable
FROM accounts a
INNER JOIN Magazin m ON a.account_id = m.account_id
INNER JOIN Clients c ON c.id = a.client_id
INNER JOIN Uso u ON c.uso_id = u.uso_id
LEFT JOIN Users us ON m.user_id = us.user_id
WHERE m.status_id IN ('1','5','9')
AND m.account_new_num is null 
AND u.branch_id = @branch_id
ORDER BY c.client_code; 

Этот вид оптимизации может значительно повысить производительность запросов.

0 голосов
/ 02 июня 2011

У вас есть индексы для ваших таблиц?Может помочь индекс по столбцам внешнего ключа, а также Magazin.status.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...