powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Работа индексов
8 сообщений из 8, страница 1 из 1
Работа индексов
    #32590708
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
create table tb_table(
  id integer, 
  int_fld integer,
  date_fld date,
  ...
 )
alter table tb_table add constraint pk_table primary key(id);

create index  idx_int_fld(int_fld);
create index  idx_date_fld(date_fld);
create descending index desc_idx_date_fld(date_fld);
create index  idx(int_fld, date_fld);
 /*---------------------------------------------------------------------------*/ 
Этот запрос использует совмествный idx
совершает  27  операций чтения 
отрабатывает меньше чем за  1  мс

select t.date_fld
from tb_table t
where (t.int_fld =  1734148 )
   and (t.date_fld >= '01-jan-2001') and (t.date_fld < '01-jan-2004')
   and (t.my_type = _WIN1251 'Д')
order by t.date_fld desc
rows  1 

А этот запрос использует индекс по убыванию desc_idx_date_fld
совершает  5  операций чтения 
отрабатывает за  1 . 3  с

select max(t.date_fld)
from tb_table t
where (t.int_fld =  1734148 )
   and (t.date_fld >= '01-jan-2001') and (t.date_fld < '01-jan-2004')
   and (t.my_type = _WIN1251 'Д')

Этот использует два индекса
совершает  5  операций чтения 
отрабатывает за  31  мс

select max(t.date_fld)
from tb_table t
where (t.int_fld =  1734148 )
   and (t.date_fld >= '01-jan-2001') and (t.date_fld < '01-jan-2004')
   and (t.my_type = _WIN1251 'Д')
plan (t index (idx_int_fld, desc_idx_date_fld))
Можно ли заставить сервер совершать меньшее количество операций чтения (в данном случае 3-5) и отрабатывать как в первом случае меньше чем за 1 мс? Или это уже бесполезно?
...
Рейтинг: 0 / 0
Работа индексов
    #32590953
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в первом случае нет агрегирования...
:)
...
Рейтинг: 0 / 0
Работа индексов
    #32591100
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оно там не нужно. Результат выборки сортируется в обратном порядке, поэтому max дата будет вверху списка. Далее стоит директива rows 1, т.е. выдать только одну эту строку. (причём всю!!!) Потом нет необходимости выполнять ещё один запрос или лепить запрос с подзапросом на max дату.
Но вот операций-то чтения 27, а не 2 и не 3.
...
Рейтинг: 0 / 0
Работа индексов
    #32591216
Лентяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.

Оно там не нужно. Результат выборки сортируется в обратном порядке, поэтому max дата будет вверху списка. Далее стоит директива rows 1, т.е. выдать только одну эту строку. (причём всю!!!) Потом нет необходимости выполнять ещё один запрос или лепить запрос с подзапросом на max дату.
Но вот операций-то чтения 27, а не 2 и не 3.

Дак ведь сервер сначала должен перелопатить все строки, проверить удовлетворяют ли они where, затем отсортировать, а уж потом из результата выдать первую строчку. Т.е. fetch <> read.
Удачи.
...
Рейтинг: 0 / 0
Работа индексов
    #32591260
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛентяйДак ведь сервер сначала должен перелопатить все строки,
Блин, ёбтть! А я о чём?
Почему выборка 27 строк через сортировку идёт В РАЗЫ быстрее чем выборка 3-5 строк через агрегирование. И можно ли агрегирование довести до нужной скорости или выборку и сортировку 27 строк скинуть до 4-5 строк???
Какую комбинацию индексов для этого сделать?
Или бесполезно?
...
Рейтинг: 0 / 0
Работа индексов
    #32591332
Лентяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предположения:
В первом запросе (без агрегата) строится индексная битовая карта, а при каждом фетче (т.е. потом) происходит обращение к страницам данных. В случае агрегата обращение к страницам данных происходит на этапе выполнения запроса.
Удачи.
...
Рейтинг: 0 / 0
Работа индексов
    #32593681
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты бы планы привел, что-ли... и статистику полную - reads/fetches и потабличные чтения (индексированные и нет).
...
Рейтинг: 0 / 0
Работа индексов
    #32593887
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня все чтения индексные, иначе я себя уважать перестану.
К тому же любые другие запросы отрегулированы так, что сколько записей попало в результат выборки — ровно столько операций индексного чтения и было сделано. (Иногда чуть больше на 3-5 чтений).
Но в этих запросах результат 1 запись.
И чтобы её выдернуть он делает без агрегата 27 чтений вместо допустимых 3-5, но менее чем за 1 мс, либо 3-5 чтений с агрегатом, но за 1.5 сек (зараза!).
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Работа индексов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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