powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как лучше создать индексы в таблице?
10 сообщений из 10, страница 1 из 1
Как лучше создать индексы в таблице?
    #38907496
xPro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть такая таблица:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE tbl
(
  f1 bigint,
  f2 bigint,
  f3 bigint,
  f4 bigint,
  f5 bigint,
  date timestamp with time zone,
  value double precision
)



Из неё выборка поля value с group by по полям f1 -f5, date. + может быть условие в where для фильтрации данных. Набор полей в group by и where может быть произвольным.

Как лучше создать индексы к такой таблице?
...
Рейтинг: 0 / 0
Как лучше создать индексы в таблице?
    #38907504
xPro,

индекс полезен, если по условию на его поля отбирается малое количество страниц таблицы.
чтобы выбрать индексы нужно анализировать распределение данных и характер запросов.
...
Рейтинг: 0 / 0
Как лучше создать индексы в таблице?
    #38907728
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xProЕсть такая таблица:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE tbl
(
  f1 bigint,
  f2 bigint,
  f3 bigint,
  f4 bigint,
  f5 bigint,
  date timestamp with time zone,
  value double precision
)



Из неё выборка поля value с group by по полям f1 -f5, date. + может быть условие в where для фильтрации данных. Набор полей в group by и where может быть произвольным.

Как лучше создать индексы к такой таблице?

Никакие в общем случае. Для запросов без where индексы скорее всего использованы не будут так как всеравно таблицу всю перебирать. Индексы для ускорения поиска каких то данных а не для ускорения запросов перебирающих всю таблицу.

--Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Как лучше создать индексы в таблице?
    #38909265
xPro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,

Так where как раз и будет в большинстве сценариев.
...
Рейтинг: 0 / 0
Как лучше создать индексы в таблице?
    #38909275
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xProMaxim Boguk,

Так where как раз и будет в большинстве сценариев.

тогда от where условий и надо строить индексы а не от group by.

--Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Как лучше создать индексы в таблице?
    #38909287
xPro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,

Я не говорю, что от group их хочу создать. Просто описал возможные сценарии.
В where может быть любой набор полей, поэтому и вопрос, как индексы создать для такого случая?
...
Рейтинг: 0 / 0
Как лучше создать индексы в таблице?
    #38909291
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xProMaxim Boguk,

Я не говорю, что от group их хочу создать. Просто описал возможные сценарии.
В where может быть любой набор полей, поэтому и вопрос, как индексы создать для такого случая?

Невозможно создать индексы которые бы работали для произвольного набора условий.

Или
1)жестко задаются возможные наборы условий и под них создаются индексы
или
2)набирается статистика наиболее популярных запросов и под них создаются индексы (смиряясь с тем что редкие запросы будут тормозить)

Я бы для начала сделал бы индексы по f1-f5 и date а дальше по фактической нагрузке и использованию решал.

--Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Как лучше создать индексы в таблице?
    #38909403
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim BogukЯ бы для начала сделал бы индексы по f1-f5 и date а дальше
зачем?
...
Рейтинг: 0 / 0
Как лучше создать индексы в таблице?
    #38909574
этта
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan DurakMaxim BogukЯ бы для начала сделал бы индексы по f1-f5 и date а дальше
зачем?
Код: sql
1.
2.
3.
4.
5.
6.
(date);
(f1,date);
(f2,date);
(f3,date);
(f4,date);
(f5,date);


для условий вида
Код: sql
1.
WHERE fn IN(..) AND date BETWEEN


обычно таки именно такого плана запросы предполагаются.

для остальных выборок по началу -- bitmap index scan-ы [т.н. фоксовский rushmore]
если же популярен набор вида
Код: sql
1.
WHERE bool_AND(fi =vi) AND date between <<>>

с фиксированным набором
то можно подшаманить более сложносоставными индексами. главное знать -- насколько всё плохо.

собрать статистику, всё лишнее снести

есть идиотская идея -- сделать btree_gist на ((ARRAY[f1..f5]), date) или даже на( hstore(f1..fn),date) -- в некоторых случаях может проканать модифицировать условия фильтра так, чтобы предвыборка шла по этому хитровыстроенному индексу, а точный фильр -- по изначальному, не модифицированному условию. (смотреть надо на условия, в их многообразии)

для группбая же по всей массе -- ничего не годно. только материализация. (там какие-то словеса можно гребсти про грануляцию, и т.п.)
...
Рейтинг: 0 / 0
Как лучше создать индексы в таблице?
    #38909733
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan DurakMaxim BogukЯ бы для начала сделал бы индексы по f1-f5 и date а дальше
зачем?

минимальный набор более менее покрывающий наиболее вероятные на мой взгляд из всех возможных where
когда неизвестно какие именно условия будут самые популярные в начале лучше не пытаться составные индексы придумывать

--Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как лучше создать индексы в таблице?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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