powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Sql запрос
13 сообщений из 13, страница 1 из 1
Sql запрос
    #38551363
r901
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе утро.
Есть запрос
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select
distinct
l.pacc_id,
p.num ,
l.limitpodgr_id ,
c.fullname ,
l1.namepodg ,
(select max(l2.data1) from limit_invest_sv l2 where l.pacc_id=l2.pacc_id and l2.limitpodgr_id=l.limitpodgr_id)
--l.aktiv1 "Активность"
from limit_invest_sv l
,personal_accounts p,clients c,limit_invest_podg l1 where l.pacc_id=p.id and c.id=p.client_id and l1.id=l.limitpodgr_id
order by l.pacc_id 


Без этой строки (select max(l2.data1) from limit_invest_sv l2 where l.pacc_id=l2.pacc_id and l2.limitpodgr_id=l.limitpodgr_id) он выводит нормально по скорости секунды, с этой строкой скорость вывода несколько минут, в таблице limit_invest_sv около 32000 записей,
как можно оптимизировать этот запрос и мне тут нужно ещё активность за максимальную дату вывести?
...
Рейтинг: 0 / 0
Sql запрос
    #38551382
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r901,
План покажи
...
Рейтинг: 0 / 0
Sql запрос
    #38551392
r901
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А где его ibexperte посмотреть?
Вот, что нашёл Plan
PLAN (L2 NATURAL)
PLAN (L2 NATURAL)
PLAN SORT (JOIN (L NATURAL, L1 INDEX (PK_LIMIT_INVEST_PODG), P INDEX (PK_PERSONAL_ACCOUNTS), C INDEX (PK_CLIENTS)))
...
Рейтинг: 0 / 0
Sql запрос
    #38551393
r901Без этой строки (select max(l2.data1) from limit_invest_sv l2 where l.pacc_id=l2.pacc_id and l2.limitpodgr_id=l.limitpodgr_id) он выводит нормально по скорости секунды, с этой строкой скорость вывода несколько минут, в таблице limit_invest_sv около 32000 записей
Код: sql
1.
create DESCENDING index limit_invest_sv_dec on limit_invest_sv(pacc_id, limitpodgr_id); commit;

- ?
ибо...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SQL> create table tm(x int); commit;
SQL> insert into tm select rand()*100 from rdb$types,rdb$types; commit;
SQL> create index tm_x on tm(x); commit;

SQL> set planonly;
SQL> select max(x) from tm;

PLAN (TM NATURAL) -- :(

SQL> set planonly;
SQL> drop index tm_x;
SQL> commit;

SQL> create  descending  index tm_x_dec on tm(x); commit;
SQL> set planonly;
SQL> select max(x) from tm;

PLAN (TM  ORDER TM_X_DEC )
...
Рейтинг: 0 / 0
Sql запрос
    #38551394
Фотография Exteris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видимо, select max(l2.data1)... дергается кучу раз, да еще и без индексов.
...
Рейтинг: 0 / 0
Sql запрос
    #38551397
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r901PLAN (L2 NATURAL)
Ну вот и одна из причин тормозов

зы.Построй индекс
на таблице limit_invest_sv
по полям pacc_id,limitpodgr_id
для этого запроса должно помочь
...
Рейтинг: 0 / 0
Sql запрос
    #38551400
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r901,

попробуй вот так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
WITH L2
AS (SELECT
        L.PACC_ID AS PACC_ID,
        L.LIMITPODGR_ID AS LIMITPODGR_ID,
        MAX(L.DATA1) AS BYDATE
    FROM LIMIT_INVEST_SV L
    GROUP BY 1, 2)
SELECT /* DISTINCT скорее всего не нужен */
    L2.PACC_ID,
    P.NUM,
    L2.LIMITPODGR_ID,
    C.FULLNAME,
    L1.NAMEPODG,
    L2.BYDATE
FROM L2
    JOIN LIMIT_INVEST_PODG L1 ON L1.ID = L2.LIMITPODGR_ID
    JOIN PERSONAL_ACCOUNTS P ON P.ID = L2.PACC_ID
    JOIN CLIENTS C ON C.ID = P.CLIENT_ID
ORDER BY L2.PACC_ID
...
Рейтинг: 0 / 0
Sql запрос
    #38551407
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вано Сусанишвили,

Вот зачем там DESC индекс по полям (pacc_id, limitpodgr_id)


Разве что по полям (pacc_id, limitpodgr_id, data1) но уверенности у меня нет, а проверять сейчас некогда
...
Рейтинг: 0 / 0
Sql запрос
    #38551411
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m7mРазве что по полям (pacc_id, limitpodgr_id, data1) но уверенности у меня нет, а проверять сейчас некогда
правильно думаешь. Но работать как надо этот индекс будет разве что в тройке и то не факт.
...
Рейтинг: 0 / 0
Sql запрос
    #38551418
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r901,

Код: plaintext
PLAN (L2 NATURAL)

ага то есть ни FK, ни индексов для полей pacc_id и limitpodgr_id нет? Да и ещё не плохо бы версию сервера озвучить
...
Рейтинг: 0 / 0
Sql запрос
    #38551430
r901
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо индекс даже по двум полям limit_invest_sv(pacc_id, limitpodgr_id) помог. Ещё раз спасибо.
...
Рейтинг: 0 / 0
Sql запрос
    #38551457
m7mВот зачем там DESC индекс по полям (pacc_id, limitpodgr_id)там под спойлером погляди, видно всё.
Да и вообще: http://www.ibase.ru/devinfo/dataaccesspaths.htm#chapter123 1.2.3. Навигация по индексу
<...>
для вычисления MIN достаточно взять первый ключ в ASC-индексе, а для вычисления MAX - первый ключ в DESC-индексе .
...
Рейтинг: 0 / 0
Sql запрос
    #38551461
а, стоп.
m7m прав: там надо как раз обычный индекс, тогда в плане будет INDEX, а не ORDER.
заклинило мну, прошу пардону.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Sql запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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