powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите разобраться с медленной группировкой в запросе
18 сообщений из 18, страница 1 из 1
Помогите разобраться с медленной группировкой в запросе
    #39281193
Marcello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Есть таблица, в которой 27 млн.строк
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE TABLE REF_DD (
    REF_ID            BIGINT NOT NULL,
    REF_OBJ1          BIGINT NOT NULL,
    REF_OBJ2          BIGINT NOT NULL,
    REF_OBJ3          BIGINT,
    REF_COUNT         NUMERIC(15,3)
);

ALTER TABLE REF_DD ADD CONSTRAINT PK_REF_DD_1 PRIMARY KEY (REF_ID);
ALTER TABLE REF_DD ADD CONSTRAINT FK_REF_DD_2 FOREIGN KEY (REF_OBJ1) REFERENCES DOCUMENT (DC_ID);
ALTER TABLE REF_DD ADD CONSTRAINT FK_REF_DD_3 FOREIGN KEY (REF_OBJ2) REFERENCES ADDTOVAR (TA_ID);
ALTER TABLE REF_DD ADD CONSTRAINT FK_REF_DD_7 FOREIGN KEY (REF_OBJ3) REFERENCES TOVAR (TV_ID);



Делаю такой запрос:
Код: sql
1.
2.
3.
4.
5.
6.
select r.ref_obj2,
       sum(iif(r.ref_obj1 = 1076345502001, r.ref_count, 0)) as REF_COUNT,
       sum(iif(r.ref_obj1 = 1076345484001, r.ref_count, 0)) as REF_COUNT2
from ref_dd r
where r.ref_id in (1076345490001, 1076345509001)
group by 1

Выполняется на мой взгляд крайне медленно:
Код: sql
1.
2.
3.
4.
5.
Plan
PLAN (R ORDER FK_REF_DD_3 INDEX (PK_REF_DD_1, PK_REF_DD_1))
------ Performance info ------
Prepare time = 15ms
Execute time = 2s 766ms



По сути тот же запрос, но без указания группировки:
Код: sql
1.
2.
3.
4.
select sum(iif(r.ref_obj1 = 1076345502001, r.ref_count, 0)) as REF_COUNT,
       sum(iif(r.ref_obj1 = 1076345484001, r.ref_count, 0)) as REF_COUNT2
from ref_dd r
where r.ref_id in (1076345490001, 1076345509001)

Скорость запроса заметно выше:
Код: sql
1.
2.
3.
4.
PLAN (R INDEX (PK_REF_DD_1, PK_REF_DD_1))
------ Performance info ------
Prepare time = 32ms
Execute time = 31ms



Почему так происходит и можно ли увеличить скорость первого запроса? Группирующее поле нужно оставить, т.к. оно далее используется.

Если что FB 2.5.5.
...
Рейтинг: 0 / 0
Помогите разобраться с медленной группировкой в запросе
    #39281205
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marcello,

Напиши первый запрос чтобы план был как у второго

ну как-то так
Код: sql
1.
2.
3.
4.
5.
6.
select r.ref_obj2+0,
       sum(iif(r.ref_obj1 = 1076345502001, r.ref_count, 0)) as REF_COUNT,
       sum(iif(r.ref_obj1 = 1076345484001, r.ref_count, 0)) as REF_COUNT2
from ref_dd r
where r.ref_id in (1076345490001, 1076345509001)
group by 1

...
Рейтинг: 0 / 0
Помогите разобраться с медленной группировкой в запросе
    #39281219
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marcello------ Performance info ------
Prepare time = 15ms
Execute time = 2s 766ms

Полную статистику покажи, включая чтения и фетчи.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите разобраться с медленной группировкой в запросе
    #39281220
Marcello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m7m,

спасибо, получилось. А в чем состоит природа этого "явления"? Можно ли как-то заранее понять, когда и куда добавлять этот +0 ?
...
Рейтинг: 0 / 0
Помогите разобраться с медленной группировкой в запросе
    #39281223
Marcello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Plan
PLAN (R ORDER FK_REF_DD_3 INDEX (PK_REF_DD_1, PK_REF_DD_1))

------ Performance info ------
Prepare time = 32ms
Execute time = 1s 390ms
Avg fetch time = 1 390,00 ms
Current memory = 36 432 656
Max memory = 37 517 688
Memory buffers = 2 048
Reads from disk to cache = 9 638
Writes from cache to disk = 0
Fetches from cache = 9 696
...
Рейтинг: 0 / 0
Помогите разобраться с медленной группировкой в запросе
    #39281225
Marcello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вот статистика запроса от m7m
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Plan
PLAN SORT ((R INDEX (PK_REF_DD_1, PK_REF_DD_1)))

------ Performance info ------
Prepare time = 15ms
Execute time = 16ms
Avg fetch time = 16,00 ms
Current memory = 36 432 504
Max memory = 37 517 688
Memory buffers = 2 048
Reads from disk to cache = 0
Writes from cache to disk = 0
Fetches from cache = 57
...
Рейтинг: 0 / 0
Помогите разобраться с медленной группировкой в запросе
    #39281234
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MarcelloFK_REF_DD_3
Покажи статистику этого индекса из gstat.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите разобраться с медленной группировкой в запросе
    #39281235
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marcellom7m,

спасибо, получилось. А в чем состоит природа этого "явления"? Можно ли как-то заранее понять, когда и куда добавлять этот +0 ?

просто вырубили навигацию по индексу. Про природу читать здесь
...
Рейтинг: 0 / 0
Помогите разобраться с медленной группировкой в запросе
    #39281247
Marcello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

не уверен, что правильно понял, но статистика показывает вот что:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
    Index FK_REF_DD_3 (5)
        Depth: 3, leaf buckets: 9634, nodes: 27241787
        Average data length: 0.04, total dup: 27024031, max dup: 97033
        Fill distribution:
             0 - 19% = 0
            20 - 39% = 0
            40 - 59% = 324
            60 - 79% = 1
            80 - 99% = 9309


И еще statistics = 0.00000459229613...
...
Рейтинг: 0 / 0
Помогите разобраться с медленной группировкой в запросе
    #39281250
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marcelloне уверен, что правильно понял
Правильно. Сервер какой архитектуры? Классик?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите разобраться с медленной группировкой в запросе
    #39281253
Marcello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

да, классик
...
Рейтинг: 0 / 0
Помогите разобраться с медленной группировкой в запросе
    #39281254
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

MarcelloMemory buffers = 2 048

ну при таком кеше не удивительно, что ORDER проигрывать будет.
...
Рейтинг: 0 / 0
Помогите разобраться с медленной группировкой в запросе
    #39281255
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marcelloда, классик
Размер страницы у БД какой?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите разобраться с медленной группировкой в запросе
    #39281259
Marcello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

16384
...
Рейтинг: 0 / 0
Помогите разобраться с медленной группировкой в запросе
    #39281260
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисну при таком кеше не удивительно, что ORDER проигрывать будет.

Вот и я о том же. Там ещё и глубина 3. Если бы не FK - вообще предложил бы этот индекс
грохнуть.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите разобраться с медленной группировкой в запросе
    #39281268
Marcello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисну при таком кеше не удивительно, что ORDER проигрывать будет.
Какой размер кэша порекомендуете?
...
Рейтинг: 0 / 0
Помогите разобраться с медленной группировкой в запросе
    #39281271
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MarcelloКакой размер кэша порекомендуете?
Оставь таким. Тут уже ничего не поделаешь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите разобраться с медленной группировкой в запросе
    #39281286
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marcello,

у тебя не тройка с её SS чтобы рекомендовать увеличивать кеш.

Посоветовать можно лишь оставить запрос с +0 и возможно слегка увеличить TempCacheLimit, но поскольку классик слишком сильно тоже не стоит.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите разобраться с медленной группировкой в запросе
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]