Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите с индексированием запроса, пожалуйста / 13 сообщений из 13, страница 1 из 1
27.03.2017, 09:23
    #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
27.03.2017, 10:14
    #39427571
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с индексированием запроса, пожалуйста
order by c.IDTYPE+0, c.NAME

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

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

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


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

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


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

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

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

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

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

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


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