Тази заявка работи около 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
- Уверете се, че има индекс във всяко поле, използвано в JOINs и в клаузата WHERE
- Ако една или таблиците, от които избирате, всъщност са изгледи, проблемът може да е в работата на тези изгледи.
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;
Този вид оптимизация може значително да подобри ефективността на заявката.