Clickhouse - снижение производительности запросов - PullRequest
1 голос
/ 03 февраля 2020

У меня есть простой запрос, который выполняется довольно быстро (1-2 секунды) и возвращает 20 строк:

select * from table where field1 = 'ABC'

Однако, если я добавлю еще один фильтр в другое поле, например:

select * from table where field1 = 'ABC' and field2 = 'XYZ'

время ожидания запроса истекло (ограничение составляет 30 секунд). Если это имеет значение, ожидается, что в нашем случае запрос вернет те же 20 строк.

Оба поля не являются частью ключа сортировки, и таблица содержит около 250 миллионов строк с примерно 20 столбцами.

Вопрос: это ожидаемое поведение? Я ожидаю, что время выполнения запросов должно быть более или менее равным. Если ожидается, есть ли руководство, какие запросы следует избегать, или есть инструмент, позволяющий выяснить, является ли это «плохим» запросом.

Заранее спасибо!

1 Ответ

4 голосов
/ 04 февраля 2020

Да. Это ожидается. В некоторых случаях CH выбирает неправильный столбец для prewhere, потому что у него нет статистики и используется алгоритм на основе правил.

Try

select * from table 
prewhere field1 = 'ABC' 
where field2 = 'XYZ'
...