Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Работа индексов / 8 сообщений из 8, страница 1 из 1
06.07.2004, 10:42:37
    #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
06.07.2004, 12:05:41
    #32590953
Johnmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа индексов
А в первом случае нет агрегирования...
:)
...
Рейтинг: 0 / 0
06.07.2004, 12:42:25
    #32591100
Zmeishe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа индексов
Оно там не нужно. Результат выборки сортируется в обратном порядке, поэтому max дата будет вверху списка. Далее стоит директива rows 1, т.е. выдать только одну эту строку. (причём всю!!!) Потом нет необходимости выполнять ещё один запрос или лепить запрос с подзапросом на max дату.
Но вот операций-то чтения 27, а не 2 и не 3.
...
Рейтинг: 0 / 0
06.07.2004, 13:12:39
    #32591216
Лентяй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа индексов
Привет.

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

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


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