Таблица:
Данных - 300 млн строк.
Запрос:
Работает сканированием всех данных.
Можно ли заставить этот запрос работать гораздо быстрее? Как? Если нет решения с индексами, какие решения есть с агрегатами? Примеры?
Лично не вижу теоретической возможности это ускорить без агрегатов, ведь чувак в запросе сказал дать ему топ-10 счётчиков среди всех комбинаций значений данных 3 колонок. Даже при наличии индексов, просмотреть и просуммировать придётся буквально все данные, что оно и делает.
Есть своё решение с агрегатами, но переложить на SQL не могу в силу пока непонятности их хелпа по части агрегатных функций, состояний и т.п.
CREATE TABLE c2.t ( date Date, datetime DateTime, name String, street String, code UInt32, count UInt64 ) ENGINE = MergeTree(date, (date, name), 8192); -- пробовал индекс (date, name, street, code)
Данных - 300 млн строк.
Запрос:
select name, street, code, sum(count) from c2.t WHERE date >= toDate('2016-01-01') AND date <= toDate('2016-09-10') GROUP BY name, street, code ORDER BY sum(count) DESC limit 10;
Работает сканированием всех данных.
Можно ли заставить этот запрос работать гораздо быстрее? Как? Если нет решения с индексами, какие решения есть с агрегатами? Примеры?
Лично не вижу теоретической возможности это ускорить без агрегатов, ведь чувак в запросе сказал дать ему топ-10 счётчиков среди всех комбинаций значений данных 3 колонок. Даже при наличии индексов, просмотреть и просуммировать придётся буквально все данные, что оно и делает.
Есть своё решение с агрегатами, но переложить на SQL не могу в силу пока непонятности их хелпа по части агрегатных функций, состояний и т.п.