Size: a a a

pgsql – PostgreSQL

2021 January 29

ГА

Георгий Ава... in pgsql – PostgreSQL
Yaroslav Schekin
Возможно, были неправильно составлены запросы, либо индекс был неподходящим.
Т.е. нужно смотреть запросы, планы и \d таблиц.
спасибо!
источник

AS

Anton Shipilov in pgsql – PostgreSQL
Yaroslav Schekin
В принципе да.
А мне что-то подсказывает, что нет. Так же если в запросе есть order by - может не совпадать с индексом
источник

AS

Anton Shipilov in pgsql – PostgreSQL
Составной индекс нужен ( или покрывающий, вечно их путаю) create index $name$ on $table$ (col_1, col_2)
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Anton Shipilov
А мне что-то подсказывает, что нет. Так же если в запросе есть order by - может не совпадать с индексом
может оба использовать, если BitmapScan-ы выберет и над ними BitmapAnd
источник

AS

Anton Shipilov in pgsql – PostgreSQL
Victor Yegorov
может оба использовать, если BitmapScan-ы выберет и над ними BitmapAnd
Угу, решил матчасть обновить, пардоньте
источник

ГА

Георгий Ава... in pgsql – PostgreSQL
Еще вопрос, по поводу покрывающего индекса.
Если правильно помню, нужное поле должно идти первым при создании индекса.
источник

SG

Sergey Gr in pgsql – PostgreSQL
Георгий Ава
Еще вопрос, по поводу покрывающего индекса.
Если правильно помню, нужное поле должно идти первым при создании индекса.
Покрывающий хорош когда вы по уникальному ключу хотите из индекса вытаскивать другие данные. Например сумму по номеру счёта.
источник

AS

Anton Shipilov in pgsql – PostgreSQL
Георгий Ава
Еще вопрос, по поводу покрывающего индекса.
Если правильно помню, нужное поле должно идти первым при создании индекса.
Очередность идёт из порядка join'a и(или) where
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Георгий Ава
Еще вопрос, по поводу покрывающего индекса.
Если правильно помню, нужное поле должно идти первым при создании индекса.
Первым должно идти то поле, которое нужно запросу (это нужно определять по логике работы индексов).
Кстати, покрывающих индексов "в вакууме" не бывает. Полное понятие — индекс, покрывающий данный запрос.
То есть это такой индекс, из которого можно получить все нужные данному запросу данные, и обращаться к самой таблице не нужно.
источник

ГА

Георгий Ава... in pgsql – PostgreSQL
Всем спасибо!
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Anton Shipilov
Очередность идёт из порядка join'a и(или) where
Хмм... в смысле?
источник

AS

Anton Shipilov in pgsql – PostgreSQL
Yaroslav Schekin
Хмм... в смысле?
Например join по нескольким полям, индекс должен строиться исходя из запроса. Например
Select ...
From table a
Join table b
On a.col_1 = b.col_5
And a.col_2=b.col_7

Тут индекс нужно делать по b(col_5, col_7)


Where col_1 =x and col_3 = y

Индекс: b(col_1, col_3)
источник

AS

Anton Shipilov in pgsql – PostgreSQL
Если это не olap запрос то executor залезет в таблицу и дернет конкретные строки(страницы)
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Anton Shipilov
Например join по нескольким полям, индекс должен строиться исходя из запроса. Например
Select ...
From table a
Join table b
On a.col_1 = b.col_5
And a.col_2=b.col_7

Тут индекс нужно делать по b(col_5, col_7)


Where col_1 =x and col_3 = y

Индекс: b(col_1, col_3)
А, ясно.
Я выше имел в виду, что лучше всё же строить индексы исходя из представления о том, как они работают, чем такими эвристическими правилами пользоваться. :)
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Anton Shipilov
Например join по нескольким полям, индекс должен строиться исходя из запроса. Например
Select ...
From table a
Join table b
On a.col_1 = b.col_5
And a.col_2=b.col_7

Тут индекс нужно делать по b(col_5, col_7)


Where col_1 =x and col_3 = y

Индекс: b(col_1, col_3)
не факт, в ваших примерах индексы col_7, col_5 и col_3, col_1 тоже допустимы
источник

AS

Anton Shipilov in pgsql – PostgreSQL
Yaroslav Schekin
А, ясно.
Я выше имел в виду, что лучше всё же строить индексы исходя из представления о том, как они работают, чем такими эвристическими правилами пользоваться. :)
Лучше исходить из того, как работает executor
источник

AS

Anton Shipilov in pgsql – PostgreSQL
Victor Yegorov
не факт, в ваших примерах индексы col_7, col_5 и col_3, col_1 тоже допустимы
Я подразумевал разные запросы, если это один - то да
источник

AS

Anton Shipilov in pgsql – PostgreSQL
Пишу с телефона
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Anton Shipilov
Лучше исходить из того, как работает executor
В этом отношении executor-ы почти всех RDMBS сейчас работают примерно одинаково (и в большинстве из них реализованы почти все возможности, которые b-tree может предоставить), поэтому общего представления о них обычно хватает. :)
источник

МБ

Максим Брюханов... in pgsql – PostgreSQL
Всем доброго дня! Помогите пожалуйста скрипт переделываю чтоб клиентов из организации удалить. Что то не выходит
источник