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 ответов

7 просмотров

о блин пропустил это, да, индекс бесполезный и ничего не индексирует и скорее всего не используется гранулярность 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 индексов зависит от того, как искомые значения распределяются по партам... если равномерно, то эффективность низкая, если нет. то норм

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

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

коллеги, добрый вечер! А никто не знает как модальная форма может себя закрыть? Ну допустим модальная форма определила, что смысла ей работать нет и хочет вернуть modalResult...
Михаил
83
А если изначально бот работал так : есть сайт онлайн школы. У каждого ученика свой кабинет. Где он авторизуется по своим данным. И уже в кабинете, на самом сайте делает оплату...
Денис 💡 Фрилансер
13
А что ты вообще делаешь ?
Yesgoter
13
средствами IBX как-то можно выполнить запрос insert ... returning?
Igor
31
На работе пишем распределенное приложение, у которого сотни, если не тысячи настроек. Конфиги написаны на xml, расположены на разных хостах и должны быть согласованы друг с др...
Aleksandr Druzhinin
5
Добрый день Хочу начать обучение языку, не являюсь представителем it, буду благодарна за помощь, совсем пока не понимаю ничего) Подскажите, пожалуйста, где можно начать первы...
Sara Lala
18
Всем привет 🙂 Какая-то непонятная проблема у меня с видео, раньше такого не было. Загружаю видео с гугл диска именно в видео mp4 и меняю ссылку как положено вот она: https://d...
Ксюша|Верстка на Тильде|Дизайн 🦥
6
Hi there everyone Is there anyone who have not started hamster bot yet? I need only one, I'll be glad if you do this for me DM if you haven't yet
Mehrshad
53
А какие у этого try практические плюсы перед eval?
Oleg Volkov
41
А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
Карта сайта