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

Тут возник вопрос по примеру который был выше с джойнами

(https://t.me/clickhouse_ru/343260) , увидел там такое
CREATE TABLE WebhookHubMessageStatuses
(
`Id` Int32,
`Timestamp` Int64,
`IdMessage` Nullable(String),
`Status` Nullable(Int32),
....
INDEX wa_webhook_msg_status_IdMessageStatus (IdMessage, Status)
TYPE set(0)
GRANULARITY 8192
)
ENGINE = ReplacingMergeTree(__data_transfer_commit_time)
ORDER BY Id
SETTINGS index_granularity = 8192;
где у индекса выставлена гранулярность 8192, судя по доке это значит в индексе будет собираться по 64кк (8192*8192) строк. Т.е. фактически блоки скорее всего будут без разбивки идти?
И вопрос как это повлияет на производительность вставки и выборки?

10 ответов

15 просмотров

о блин пропустил это, да, индекс бесполезный и ничего не индексирует и скорее всего не используется гранулярность secondary indexes измеряется в гранулах первичного ключа... то есть там должно быть от 1 до 8 в целом. ну иногда 16 и 32 я видел... для очень редких кейсов тем боле что там еще и тип кривой set(0) я бы сделал ALTER TABLE ... DROP INDEX от греха подальше

Tetra- Автор вопроса
Slach [altinity]
о блин пропустил это, да, индекс бесполезный и нич...

а в целом не конкретно тут а в общей практике к чему приведет вот такая ошибка в плане производительности7

Tetra
а в целом не конкретно тут а в общей практике к че...

ну, индекс может пытаться использоваться и использоваться не эффективно потому что в клике индексы это data skip то есть при открытии парта и использовании индекса проверяется что искомого значения НЕТ в парте и поэтому его можно не сканировать... вообще data skip индексы плохо работают если искомые значения колонок размазаны ровным слоем по всем партам тогда получается оверхед на проверки индексов замедляет запрос потому что парты все равно сканируются... ну и когда куча мелких партов тоже будет замедление. но куча мелких партов это в любом случае жопа которую надо чинить со стороны INSERT

Tetra- Автор вопроса
Slach [altinity]
ну, индекс может пытаться использоваться и использ...

т.е. в случае set(0) но такой большой гранулярностью 8192 смысла в нем абсолютно нет, т.к. он будет говорить что среди 8192 гранул есть/нет искомого значения и если есть то он полезет читать эти данные. Т.е. по факту любой срабатывание данного индекса просто приводит к потенциальному чтению до 64кк строк и он реально бесполезен

Tetra
т.е. в случае set(0) но такой большой гранулярност...

конкретно set(0) + GRANULARITY 8192 тупо говорит "это значение есть в этих 8192 гранулах или нет" поскольку гранулы тоже не маленькие ... то он тупо проверяет есть или нет значение причем он еще и весить должен дофига, потому что фактически дублирует колонки IdMessage + Status в каждом парте, и я не помню, сжимаются ли data skip индексы или нет...

Tetra- Автор вопроса
Slach [altinity]
конкретно set(0) + GRANULARITY 8192 тупо говорит ...

спасибо, значит все правильно понимаю

если было например set(100) то если у нас больше 100 значений в блоке, то индекс пустой и тупо опять же не используется https://clickhouse.com/docs/en/optimize/skipping-indexes#set

Tetra- Автор вопроса
Slach [altinity]
если было например set(100) то если у нас больше 1...

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

Slach [altinity]
конкретно set(0) + GRANULARITY 8192 тупо говорит ...

добрый день, этот индекс я создавал в тщетных попытках оптимизировать запрос и забыл удалить после того, как по EXPLAIN понял, что она бесполезная :) А можно ли в этом кейсе настроить и подобрать правильный skipping index или это в любом случае будет бесполезным?

galamsharx
добрый день, этот индекс я создавал в тщетных попы...

в каком этом кейсе??? там запрос где с WITH? повторюсь еще раз. эффективность skipping индексов зависит от того, как искомые значения распределяются по партам... если равномерно, то эффективность низкая, если нет. то норм

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
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...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
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
Карта сайта