Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.25;
Скачать: CL | DM;

Вниз

Запрос   Найти похожие ветки 

 
Polevi ©   (2004-01-30 10:31) [0]

Есть таблица Transacts

ID INT IDENTITY PRIMARY KEY CLUSTERED
OperDate - DATETIME
Aricle - INT
Company - INT
Source - INT
Project - INT

все поля проиндекированы
Debet MONEY, KREDIT MONEY

в таблице около 100 тыс записей

запрос вида

SELECT Project, SUM(Debet), SUM(Kredit)
FROM Transacts T
JOIN GetArticles(@Articles) A ON T.Article=A.ID
JOIN GetCompanies(@Companies) C ON T.Company=C.ID
JOIN GetSources(@Sources) S ON T.Source=S.ID
JOIN GetProjects(@Projects) P ON T.Project=P.ID
WHERE OperDate BETWEEN @DateFrom AND @DateTo
GROUP BY Project

(GetXXX - ф-ия, разворачивающая строку идентификаторов в таблицу с полем ID)

выполняется порядка 4 секунд, execution plan говорит что все время пожирает clustered index scan

мне кажется что для 100 тыс записей могло бы работать и побыстрее
блокироки исключены - работаю монопольно

может быть у кого есть соображения как ускорить сие ?


 
Fiend ©   (2004-01-30 11:14) [1]

А функции которые вы используете в запросе возвращают по одной строке? (это так для информации)

Хотя конечно дюже медленно. У меня на 13 млн с пятью полями и одним лишь кластерным индексом выбирало мгновенно


 
Polevi ©   (2004-01-30 11:21) [2]

>Fiend © (30.01.04 11:14) [1]
ф-ия возвращает таблицу с колвом записей >= колву идентификаторов переданных в качестве параметра (они там через запятую) - разворачивает дерево


 
Fiend ©   (2004-01-30 11:42) [3]

А что если провести эксперимент в поисках провала производительности?

вставить результат функций в четыре отдельные таблицы
а в процедуру (ради эксперимента) подставить таблицы вместо функций? Это недолго осуществить


 
stone ©   (2004-01-30 11:56) [4]


> Polevi © (30.01.04 11:21)


Существует ли индекс для OperDate ?
Как быстро отрабатывает функция GetXXX?


 
Delirium ©   (2004-01-30 12:02) [5]

Результат GetXXX - во временную таблицу, на временную таблицу - кластерный индех, и только потом - в join.


 
Polevi ©   (2004-01-30 12:05) [6]

>Fiend © (30.01.04 11:42) [3]
это ничего не меняет

>stone © (30.01.04 11:56) [4]
индекс есть

GetXXX работает очень быстро - она сканирует справочник, размер справочника не превышает 300 записей - то есть ф-ия может возвратить максимум 300 записей если ей в качестве парметра передать root дерева

убрал кластер с Id - стало работать процентов на 20 побыстрее - теперь вместо clustered index scan все жрет bookmark lookup


 
Polevi ©   (2004-01-30 12:07) [7]

>Delirium © (30.01.04 12:02) [5]
CREATE FUNCTION GetArticles(@Articles VARCHAR(4096))
RETURNS @TT TABLE (ID INT PRIMARY KEY CLUSTERED) AS
BEGIN
..
..


 
Delirium ©   (2004-01-30 12:10) [8]

Предлагаю завести top 10000 и поочерёдно комментировать join-ы, и таким образом найти тормозящий


 
stone ©   (2004-01-30 12:20) [9]


> Polevi © (30.01.04 12:05)

немного ускорит работу если индекс на OperDate сделать кластерным, но тем не менее проблема кажется в JOINах


 
Polevi ©   (2004-01-30 12:38) [10]

всем спасибо господа, разобрался
ошибка моя :)
выборка делалсь из вьюхи где от DATETIME вызовом ф-ии отсекалось время - соотв. индекс на дате не работал - отсюда скан
убрал вызов ф-ии - все взлетело, чего и следовало ожидать



Страницы: 1 вся ветка

Текущий архив: 2004.02.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.037 c
4-80377
Amadeus
2003-12-19 00:08
2004.02.25
Ставлю глобальный хук на клавиатуру, но клавиши не ловятся.


14-80151
Soft
2004-02-01 17:11
2004.02.25
Черствеем мы, спасите наши души.


1-79775
тихий вовочка
2004-02-10 23:14
2004.02.25
RichEdit и позиционирование курсора


11-79686
=Sniper=
2003-06-07 23:50
2004.02.25
Не работает BorderStyle и BorderIcons


3-79663
lic_
2004-01-30 14:12
2004.02.25
Кодировка