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

Всем привет! Пусть имеем ORDER BY (a, b). А в

запросе используется только where b=5. Сможет ли Clickhouse использовать индекс в этом случае, т.е. не делать full scan?

16 ответов

7 просмотров

Если каждый А имеет Б = 5, то пройдёт по всем А и найдёт все Б.

для всех a надо будет знать где искать b. Если у вас a - это высокочастотное значение типа UUID - то считайте что у вас фулскан будет

зависит от кардинальности колонки A

Nikita- Автор вопроса
ivan
зависит от кардинальности колонки A

А какая в этом логика? Если у нас все равно по гранулам бьётся? Пусть кардинальность большая, но мы же можем в индекс посмотреть, а там для второй колонки есть минимумы гранул

Nikita
А какая в этом логика? Если у нас все равно по гра...

не понял вы считаете, что если в индексе две колонки, то каждая отсортирована в своем порядке?

ivan
не понял вы считаете, что если в индексе две колон...

это два набора меток, а потом, чтобы из этого строку собрать, надо lookup этих меток делать? а на три колонки — три набора меток..

Nikita- Автор вопроса
ivan
не понял вы считаете, что если в индексе две колон...

Нет, порядок один. Просто мы же можем по индексу пройти. Первую колонку мы не знаем, но вторую знаем. И по индексу понять, что некоторые гранулы нам считывать не нужно (там минимум меньше, чем нам нужно).

Nikita
Нет, порядок один. Просто мы же можем по индексу п...

если в первой колонке значения уникальные, то "пройти по индексу" для второй колонки — это тот же скан

Nikita- Автор вопроса
ivan
если в первой колонке значения уникальные, то "про...

Но у нас же индекс разреженный. Мы будем смотреть только каждую 8000ую запись и то в памяти

Nikita
Но у нас же индекс разреженный. Мы будем смотреть ...

и там каждое 8000 значение рандомное, потому что сначала отсортировано по уникальной первой колонке

Nikita- Автор вопроса
ivan
и там каждое 8000 значение рандомное, потому что с...

Но это рандомное значение является минимумом в грануле. Если мы ищем по b, которое меньше этого значения, то мы можем гранулу не считывать

Nikita
Но у нас же индекс разреженный. Мы будем смотреть ...

Бахните now64 в первую, а во вторую number%10 и увидете о чем говорит Иван

Nikita
Но это рандомное значение является минимумом в гра...

таблица col1, col2 значения (a, 100), ..., (c, 100), ... (b,50) делаем индекс (col1, col2) метки: (a, 100), ..., (b,50), ..., (c, 100) ваш "min max" для col2 "в точке b" благополучно невалиден

Nikita
Но это рандомное значение является минимумом в гра...

CREATE TABLE test_pk ENGINE MergeTree PRIMARY KEY (now_1,number_10) as SELECT now64() as now_1, number%10 as number_10 FROM numbers(10000) И потестите запросы

Константин
CREATE TABLE test_pk ENGINE MergeTree PRIMARY KEY ...

10000 записей это две гранулы, думаю индекс тут никак не повлияет

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

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

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно 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
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта