172 похожих чатов

Привет, есть такой сложный ключик: (s_id, p_id, ts) 2 инта

и timestamp

- s_id около 20к сейчас (может быть 100к в будушем)
- p_id считанный десяток
- ts на каждую минуту

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

вроде сперва с самой маленькайо cardinality, потом больше? напомните пожалуйста

(таблица еще будет по ts партицированна. но это другой вопрос)

11 ответов

20 просмотров

Если таблица будет партиционирована то ts у вас первое поле индекса в любом случае т.к. постгрес не умеет в глобальные индексы. Далее обычно по убыванию селективности - s_id, p_id

Зависит практически исключительно от операцый. Если только = на все три поля -- то вообще без разницы, например. cardinality можэт сделать какие-то варианты безсмысленными для упорядоченного поиска не первых полей индэкса, да. Но опять всё зависит от того, что ищем.

Denis
Если таблица будет партиционирована то ts у вас пе...

>т.к. постгрес не умеет в глобальные индексы. Что, однако, совершэнно не требует ставить ts первым. Более того, учитывая особенности ts (чаще всего ищут по диапазону, чаще всего значения плюс-минус уникальны) -- как раз после ts что-то ставить ужэ не очень полезно.

Ilya Anfimov
>т.к. постгрес не умеет в глобальные индексы. Что...

его не придется ставить, у вас партиция индекса уже будет базироваться на диапазоне ts

Denis
его не придется ставить, у вас партиция индекса уж...

Как будто от того, что у нас есть диапазон ts -- индэкс автоматически перестаёт быть нужэн!

Ilya Anfimov
При чём тут вообще это?

при том что если вы не укажете в запросе ts то будут просмотрены ВСЕ партиции индекса, что по сути похоже на скипскан составного индекса (ts,s_id,p_id)

Ilya Anfimov
При чём тут вообще это?

И кстати еще проблема уникальности. Можно притворяться что в постгресе "не обязательно ставить ts первым", но когда встает вопрос глобальной уникальности то выясняется что ts там уже давно стоит не смотря на то что его там вроде бы "нет".

Denis
при том что если вы не укажете в запросе ts то буд...

>то будут просмотрены ВСЕ партиции индекса, Конечно. Или если указать неправильно. >то по сути похоже на скипскан составного индекса Ну и? Тем более, что партицый обычно не так много -- и это скипскан с небольшой кардинальностью. Впрочем, это отход от темы всё. Ещё раз -- если ts указан точно -- то порядок вообще не будет важэн. Если диапазоном -- то ужэ появляются вопросы к кардинальности всех остальных условий. И если она строго равна один (указаны точно) -- то ts как раз нужно будет ставить последним. И это совершэнно независимо от области значений ts -- поделены они на партицыи или нет.

Oleg-Kovalov Автор вопроса
Denis
при том что если вы не укажете в запросе ts то буд...

в запросах там всегда участвует ts, то есть партиции 100% отсекаются и чаще всего 1 будет интересна

Oleg Kovalov
в запросах там всегда участвует ts, то есть партиц...

ну и посудите сами - 1 у вас всегда указывается ts, 2 это самое селективное поле в данном случае смысл городить партиционированный по ts индекс в котором "отсутствует" поле ts :))

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта