powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите с индексированием запроса, пожалуйста
13 сообщений из 13, страница 1 из 1
Помогите с индексированием запроса, пожалуйста
    #39427543
Devillio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
Подскажите, пожалуйста: в таком виде отрабатывает 30-40 секунд:
Код: sql
1.
2.
3.
4.
5.
6.
select c.ID, c.NAME, pt.FULLNAME as VPNAME, ...
from TCATALOG c 
inner join SPPUBLTYPES pt on pt.ID=c.IDTYPE 

where c.status=1
order by c.IDTYPE, c.NAME


План
PLAN SORT (JOIN (PT NATURAL, C INDEX (TCATALOG_IDX_IDTYPE)))



а в таком - мгновенно (в скобках - все возможные значения):
Код: sql
1.
2.
3.
4.
5.
6.
7.
select c.ID, c.NAME, pt.FULLNAME as VPNAME, ...
from TCATALOG c 
inner join SPPUBLTYPES pt on pt.ID=c.IDTYPE 

where c.status=1
and (c.IDTYPE in (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15))
order by c.IDTYPE, c.NAME


План
PLAN JOIN (C ORDER TCATALOG_IDX1 INDEX (TCATALOG_IDX_IDTYPE, TCATALOG_IDX_IDTYPE, TCATALOG_IDX_IDTYPE, TCATALOG_IDX_IDTYPE, TCATALOG_IDX_IDTYPE, TCATALOG_IDX_IDTYPE, TCATALOG_IDX_IDTYPE, TCATALOG_IDX_IDTYPE, TCATALOG_IDX_IDTYPE, TCATALOG_IDX_IDTYPE, TCATALOG_IDX_IDTYPE, TCATALOG_IDX_IDTYPE, TCATALOG_IDX_IDTYPE, TCATALOG_IDX_IDTYPE, TCATALOG_IDX_IDTYPE), PT INDEX (PK_SPPUBLTYPES))




индексы вот такие: (idx1 это уже экспериментировал потом)
Код: sql
1.
2.
3.
CREATE INDEX TCATALOG_IDX1 ON TCATALOG (IDTYPE, NAME);
CREATE INDEX TCATALOG_IDX_IDTYPE ON TCATALOG (IDTYPE);
CREATE INDEX TCATALOG_IDX_NAME ON TCATALOG (NAME);



Почему так работает? Почему не используется PT INDEX (PK_SPPUBLTYPES) в первом запросе?
Можно ли заставить работать быстро первый запрос?

Спасибо, коллеги!
...
Рейтинг: 0 / 0
Помогите с индексированием запроса, пожалуйста
    #39427571
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
order by c.IDTYPE+0, c.NAME

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

Думаешь что с планом
PLAN SORT (JOIN (С NATURAL, PT INDEX (PK_SPPUBLTYPES)))
будет быстрее работать???

зы. а во втором случае выбрал все результирующие записи, или только первую порцию???
...
Рейтинг: 0 / 0
Помогите с индексированием запроса, пожалуйста
    #39427686
Devillio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan_Pisarevsky, неа, те же результаты:
Время подготовки запроса = 172ms
Время выполнения запроса = 40s 375ms
Среднее время на получение одной записи = 1 755,43 ms


m7m, это в обоих случаях - первая порция
Дальнейший фетч идет примерно одинаково (там 98 тыс записей, около 10 сек и в том и в том случае)

Время подготовки запроса = 250ms
Время выполнения запроса = 344ms
Среднее время на получение одной записи = 14,96 ms
(это второй вариант)
...
Рейтинг: 0 / 0
Помогите с индексированием запроса, пожалуйста
    #39427696
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Devillio...это в обоих случаях - первая порция...


Ну так в первом случае в плане SORT
а во втором ORDER
что вполне объясняет полученное время работы при выдачи первой порции результата
...
Рейтинг: 0 / 0
Помогите с индексированием запроса, пожалуйста
    #39427772
Devillio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m7m, мне непонятно, почему когда я прошу выдать просто все записи - все тупит, а когда прошу "выдать все, а именно, эту, ту, и ту" - выдает тот же объем информации, но быстрее в 80 раз. А называется это sort, order, natural - какая разница? Как правильно быстро получить такой простой join? Не создавать же перед запросом перечисление всех id для in, по-моему, это неправильно )
...
Рейтинг: 0 / 0
Помогите с индексированием запроса, пожалуйста
    #39427774
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Devillioмне непонятно
http://www.ibase.ru/dataaccesspaths/
Читать до просветления.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите с индексированием запроса, пожалуйста
    #39427775
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Devillio,

сначала сортируй, потом соединяй

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with c as (
  select ID, IDTYPE, NAME
  from TCATALOG   
  where status=1
  order by IDTYPE, NAME
)
SELECT c.ID, c.NAME, pt.FULLNAME as VPNAME, ...
from c 
join SPPUBLTYPES pt on pt.ID=c.IDTYPE
...
Рейтинг: 0 / 0
Помогите с индексированием запроса, пожалуйста
    #39427783
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Devilliom7m, мне непонятно, почему когда я прошу выдать просто все записи - все тупит, а когда прошу "выдать все, а именно, эту, ту, и ту" - выдает тот же объем информации, но быстрее в 80 раз. А называется это sort, order, natural - какая разница? Как правильно быстро получить такой простой join? Не создавать же перед запросом перечисление всех id для in, по-моему, это неправильно )

выбери все записи первым запросом и выбери все записи вторым запросом
и почувствуй отсутствие "быстрее в 80 раз"
ну и конечно для понимания читать то что посоветовали здесь 20337187
...
Рейтинг: 0 / 0
Помогите с индексированием запроса, пожалуйста
    #39427785
Devillio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис, благодарю за предоставленное решение! Да, так работает быстро.
И всем спасибо за участие и советы.
...
Рейтинг: 0 / 0
Помогите с индексированием запроса, пожалуйста
    #39427790
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m7m,

у него причина в слишком широкой выборке, а не только в выборе первых записей vs всех записей. Как альтернатива увеличить TempCacheLimit
...
Рейтинг: 0 / 0
Помогите с индексированием запроса, пожалуйста
    #39427793
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DevillioСимонов Денис, благодарю за предоставленное решение! Да, так работает быстро.
И всем спасибо за участие и советы.

Ну вот обясните мне непонимающему, откуда это запрос "работает быстро"
Разве что при выборке "первой порции"
???
...
Рейтинг: 0 / 0
Помогите с индексированием запроса, пожалуйста
    #39427796
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисm7m,

у него причина в слишком широкой выборке, а не только в выборе первых записей vs всех записей. Как альтернатива увеличить TempCacheLimit
Ну ты смотришь внимательней чем я
ибо я увидел только " c.ID, c.NAME, pt.FULLNAME as VPNAME" а вот запятую и точки опосля как-то прозевал

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


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