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

Есть простая таблица CREATE TABLE default.syslog ( `severity` UInt16,

`facility` UInt16,
`timestamp` DateTime,
`hostname` String,
`tag` String,
`message` String
)
ENGINE = MergeTree()
PARTITION BY toYYYYMM(timestamp)
ORDER BY (timestamp, hostname)
TTL timestamp + toIntervalDay(45)
SETTINGS index_granularity = 8192Записей много!
Можно как-то оптимизировать
SELECT DISTINCT hostname FROM syslogбез предварительного аггрегирования?

13 ответов

3 просмотра

Почему order by такой? Если hostname не слишком много, стоит поменять их местами. Не знаю, оптимизирован ли distinct сейчас, group by host_name,... сильно ускорится

hostname LowCardinality(String) и делать select hostname from FROM syslog group by hostname или тупо вынести в отдельную таблицу, и сделать типа словаря

1) hostname замените тип на LowCardinality(string) 2) ORDER BY поменяйте поставьте сначала hostname а потом timestamp 3) SELECT DISTINCT hostname FROM syslog WHERE timestamp BETWEEN no() - INTERVAL 20 DAYS AND now() - такое допустимо?

Valeriy-Filatov Автор вопроса
Slach [altinity]
1) hostname замените тип на LowCardinality(string)...

1. да! Ускорение ~10 раз, если запрос поменять на "select hostname from syslog group by hostname" 2. да, еще быстрее, но "поломался" поиск без участия hostname, ОЧЕНЬ медленно. Пришлось вернуть "ORDER BY (timestamp, hostname)" обратно.

Valeriy Filatov
1. да! Ускорение ~10 раз, если запрос поменять на ...

какой конкретно поиск? where что? как у вас таблица партиционирована?

Valeriy-Filatov Автор вопроса
Denny [Altinity]
какой конкретно поиск? where что? как у вас табли...

CREATE TABLE default.syslog ( `severity` UInt16, `facility` UInt16, `timestamp` DateTime, `hostname` LowCardinality(String), `tag` String, `message` String ) ENGINE = MergeTree() PARTITION BY toYYYYMM(timestamp) ORDER BY (timestamp, hostname) TTL timestamp + toIntervalDay(45) SETTINGS index_granularity = 8192 Если ORDER BY поменять местами, то SELECT formatDateTime(timestamp, '%m/%d %H:%M'), hostname, severity, tag, message FROM syslog WHERE timestamp >= $value1 AND timestamp < $value2 AND message like $msg ORDER BY timestamp ASCвозвращается ОЧЕНЬ медленно. Понятно, что если добавить "AND hostname = ..." запрос возвращается быстро

Valeriy Filatov
CREATE TABLE default.syslog ( `severity` UInt1...

сделайте ORDER BY (toStartOfHour(timestamp), hostname)

Valeriy-Filatov Автор вопроса
Valeriy-Filatov Автор вопроса
Denny [Altinity]
сделайте ORDER BY (toStartOfHour(timestamp), hostn...

Сделал, но разница несущественна даже с toStartOfDay. Заметил другую проблему: переходы на "далекую" страницу до минуты и более SELECT * FROM syslog WHERE timestamp >= toDate('2020-11-02') AND timestamp < NOW() AND hostname='myhost' LIMIT 1000 OFFSET 1053000

Valeriy Filatov
Сделал, но разница несущественна даже с toStartOfD...

OFFSET 1053000 -- а чего вы ожидали собственно? Чуда? Нет. Деда мороза не бывает.

Valeriy Filatov
Сделал, но разница несущественна даже с toStartOfD...

я посоветовал такой ORDER BY (toStartOfHour(timestamp), hostname) чтобы работали по индексу запросы вида where hostname = ? and timestamp between

Denny [Altinity]
я посоветовал такой ORDER BY (toStartOfHour(timest...

А разве не наоборот должны быть поля в ордер бай для вашего примера?

Anton
А разве не наоборот должны быть поля в ордер бай д...

есть хитрость в КХ, он умеет делать skip scan, для лидирующих полей в индексе, что-то вроде oracle-fast-full-index-scan, если кардинальность лидирующего поля мала Valeriy наоборот отказывался делать, у хоста кардинальность большая, а ему нужно делать запросы с фильтрацией по дате, без фильтра по хосту

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

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

кому не сложно распишите пожалуйста для какой цели тут вот эти скобки и в них пихается указатель?
Михаил Helper
15
Обновленный chat тестили уже господа? Готовимся на заводы ? Простой проект на ларавель собирает за 1 ответ..
Jacov Borisov
11
Или мне дублировать структуру с информацией о следующем потоке в адресное пространство текущего потока?
One
9
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
в "главной форме" создаются "дочерние формы / копии главной" new_form := TForm1.Create(Application); new_form.blah_blah_blah обработчик, срабатывающий при изменении положени...
livontiy
6
Такс, блин, таки кто-то знает, каким образом работают макросы stdin/stdout/stderr? Я влез в stdio.h, там определения нет, отладил через асмокод - вызывается функция со странны...
The Bird of Hermes
18
Комрады, посоветуйте, куда копать? Стал прикручивать кастомизацию тем. В OnShow главной главной формы пытаюсь загрузить из файла настроек и применить тему (на скрине, как долж...
Ed Doc
13
OnShow один раз вызывается? или возможен Hide?
Iluha Companets
14
Can anyone help me out here?
Ryzen
7
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Карта сайта