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

Подскажите, как можно ускорить выборку из SummingMergeTree? В сутки примерно

+1 млрд записей в таблицу. ORDER BY достаточно большой, поэтому задал PRIMARY KEY по первым двум полям (типы DateTime и IPv4), т.к. выборка по ним идёт больше всего.
Знаю, что можно добавить индексов в таблицу, но не особо помогают. Может, я их неправильно готовлю, не пойму.
В среднем, запросы выполняются от 4-5 секунд, в зависимости от выбранного интервала времени. Почему грешу на индекс - вижу в SELECT count(), что вытаскивается 150 тысяч строк, а в запросе Processed 5.21 million rows, т.е. индекс явно не используется.

11 ответов

33 просмотра

нужны детали, например ДДЛ таблицы и запрос

Казанский- Автор вопроса
【D】【J】
нужны детали, например ДДЛ таблицы и запрос

Около 10 колонок, ORDER BY включает 8 колонок, кроме двух, по которым собирается аггрегация. PRIMARY KEY строю по DateTime и IPv4 (тип колонки). Исходные данные забираю из "большой" таблицы на 35 колонок, которая MergeTree.

Казанский
Около 10 колонок, ORDER BY включает 8 колонок, кро...

т.е. вы выстрелили себе в ногу положив DateTime первым в индекс?

Dmitriy S
А можете уточнить, чем это плохо?

Тем, что у вас идёт фулл скан таблицы при любом запросе

Константин
Тем, что у вас идёт фулл скан таблицы при любом за...

либо явно указывать рамки, чтобы сканил только одну партицию?

Dmitriy S
либо явно указывать рамки, чтобы сканил только одн...

Я ошибся, фулл скан партиций в которые попадает WHERE dateTime

Константин
Я ошибся, фулл скан партиций в которые попадает WH...

а это будет в свежих версиях КХ поправлено? 😱

Казанский- Автор вопроса
Denny [Altinity]
т.е. вы выстрелили себе в ногу положив DateTime пе...

А там DateTime с 10-минутными интервалами, то есть в одно такое значение DateTime мы получаем несколько млн строк, поэтому он и в индексе. Я не пойму, почему кликхаус в выборку берёт слишком много строк, индекс по DateTime-то есть.

Казанский
А там DateTime с 10-минутными интервалами, то есть...

там все очень тупо и надежно работает и там все очевидно. но всплепую, без конкретики это не объяснить

Казанский- Автор вопроса
Denny [Altinity]
там все очень тупо и надежно работает и там все оч...

А где можно почитать про работу индексов подробнее?

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
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
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
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
Карта сайта