подзапрос возвращающий больше 100 млн значений?
Есть такой запрос:
select ...
from big_table
where ...
and obj_hash in ( select obj_hash from obj_white_list_100m )
Он проверяет, что значения obj_hash содержаться в "белом" списке объектов. Посмотрел в логах - там создаётся хэш-таблица, она занимает 10гб оперативки и на это уходит минута времени примерно.
Я сначала подумал использовать словарь и dictHas, но многовато наверное для словаря (больше 100 млн записей сейчас)?
ну никак. Это самый быстрый вариант. Тут даже без КХ сложно придумать как это сделать быстрее.
А в select из большой таблицы, если не брать последнее отсечение по хэшу из whitelist, сколько получается данных? Правый whitelist динамический (может со временем меняться) или просто большая статическая таблица?
Можно переделать эту таблицу на engine=join, чтобы она всегда была в памяти
Обсуждают сегодня