/ / Как да оптимизирам заявката? t-sql - sql, sql-сървър-2005, tsql

Как да оптимизирам заявката? t-sql-sql, sql-server-2005, tsql

Тази заявка работи около 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).

Възможно ли е по някакъв начин да оптимизираме тази заявка?

Отговори:

1 за отговор № 1

Поставете записите в Временна таблица без използване на Поръчка по клауза и след това ги сортирайте с помощта на c.client_code. Надявам се, че трябва да ви помогне.

Създаване на таблица #temp ( вашите колони ... )

и Поставете записите в тази таблица Без използване на Поръчка по клауза. Сега стартирайте select с Подреждане по клауза


0 за отговор № 2

Имате ли настроени индекси за вашите таблици? Индекс на колони с външни ключове, както и Magazin.status може да помогне.


0 за отговор № 3
  1. Уверете се, че има индекс във всяко поле, използвано в JOINs и в клаузата WHERE
  2. Ако една или таблиците, от които избирате, всъщност са изгледи, проблемът може да е в работата на тези изгледи.

0 за отговор № 4

Винаги се опитвайте да изброите таблици по-рано, ако те са посочени в клаузата where - тя отрязва комбинациите от редове възможно най-рано. В този случай Magazin table има някои предикати в клаузата where, но е посочена по-долу в списъка с таблици. Това означава, че всички останали обединения трябва да бъдат направени преди редовете Magazin могат да бъдат филтрирани - вероятно милиони допълнителни редове.

Опитайте това (и ни кажете как е минало):

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;

Този вид оптимизация може значително да подобри ефективността на заявката.