Size: a a a

2021 May 16

AR

Anton Revyako in ctodailychat
а индекс покажи
источник

AR

Anton Revyako in ctodailychat
хранит количество страниц
источник

СА

Сергей Аксёнов... in ctodailychat
CREATE INDEX table_name_surname ON public.table USING btree (name, surname)
источник

СА

Сергей Аксёнов... in ctodailychat
У surname очень низкая селективность
источник

СА

Сергей Аксёнов... in ctodailychat
Я, разумеется, заменяю реальные названия полей и таблицы, из легкой паранойи.
источник

AR

Anton Revyako in ctodailychat
можешь попробовать:
- пересобрать статистику руками
- сделать order by во внешнем запросе, а where в подзапросе


но, кажется, у 11 посгри не очень со статистикой по мультиколоночным индексам

обнови pg )
источник

СА

Сергей Аксёнов... in ctodailychat
То есть если делать из этого кейс для учебника, то name и surname надо поменять местами. Но сейчас по факту surname вообще одно значение может иметь.
источник

СА

Сергей Аксёнов... in ctodailychat
> - сделать order by во внешнем запросе, а where в подзапросе

Это сломает исходный смысл: мне надо выбрать 10 последних Иванов в базе, а вообще Иванов в ней очень много, подзапрос вернёт огромный список.
источник

AR

Anton Revyako in ctodailychat
не хочу тебя расстраивать, он и так вернет этот список
источник

ДВ

Данила Волков... in ctodailychat
А точно ли это баг? В индексе нет поля id -> он не учитывается в бинарном дереве, соответсвенно планировщик юзает тот индекс, по которому может отсортировать
источник

СА

Сергей Аксёнов... in ctodailychat
Хм, тоже верно.
источник

ДВ

Данила Волков... in ctodailychat
Кстати, ловилось, что индексы в 11 постгре в больших таблицах при частых вставках ломались и приходилось реиндексить самостоятельно.
источник

СА

Сергей Аксёнов... in ctodailychat
Спасибо!
источник

AR

Anton Revyako in ctodailychat
пофиксил?)
источник

СА

Сергей Аксёнов... in ctodailychat
Пока думаю, как лучше поступить. Может быть просто накину новый индекс name_surname_id и всегда буду добавлять surname в запрос.
источник

СА

Сергей Аксёнов... in ctodailychat
Так-то это edge case, когда нет записей с нужным name. Ещё варик - проверять сначала SELECT COUNT (*) WHERE name=$1, он мгновенно отвечает.
источник

AR

Anton Revyako in ctodailychat
Тебе же count не нужнен вроде? Тебе надо знать есть такое или нет. тогда лучше
SELECT EXISTS (SELECT FROM t WHERE name=$1)
источник

IV

Igor V in ctodailychat
за что не люблю реляционные базы, так это из-за желания использовать одну структуру данных для всех use cases. В классическом мире реляционок индексы часто используются чтобы подпилить напильником структуру под условия задачи.

А должно быть наоборот - задача определяет структуру данных
источник

VG

Valentin Golev in ctodailychat
я часто думал вьюхи делать для решения такой проблемы, но ни разу до них не дошел
источник

IV

Igor V in ctodailychat
на серьёзных щах обсуждают как обмануть планировщик (aka black box). Камон, data redundancy это нормально
источник