которых является tags множество String значений. Для этих целей пытаюсь использовать тип Array(String). Необходимо уметь делать запросы вида where has(tags, '<tag>'). Но в этом случае время выполнения запроса увеличивается в сотни раз. В другой DB подобные вещи делаются с помощь multivalue dimensions, и время запроса наоборот уменьшается.
Подскажите, пожалуйста, можно ли средставими Clickhouse улучшить производительность запросов такого типа?
arrayJoin() используй, мне помогало
Храните теги отдельно, а к событиям пишите хэш от них, сделайте ключ (хэш, время), сначала выбирайте хэш по тегам, а потом уже этот хэш в запрос докидывать
Покажите сколько в среднем значений в массиве строк. Может у вас там милионые массивы. И в логе КХ есть что-то типа плана выполнения - тоже полезно
Запрос тормозит по тому, что ваш первичный ключ по id, и индекс тоже. А запрос - по полю не из индекса. Потому и тормозит
Увеличивается в сотни раз по сравнению с чем? Возможно where и prewhere надо вручную выбрать.
Кажется вам должен помочь фичер под названием roaring bitmap, появившийся в 19.4. Нужно перемаповать эти строки в числа, а потом на них сделать roaring bitmap. После чего всякие вхождения элемента или пересечения /объединения должны сделаться очень дешёвыми операциями.
Обсуждают сегодня