my_key UInt64,
my_value UInt64
)
ENGINE = MergeTree()
ORDER BY my_key
Соответственно primary key и sorting key - my_key.
Выполняем запрос типа: SELECT t.my_key AS KEY FROM test t WHERE t.my_value = 123 LIMIT 1 BY t.my_key он конечно же делает full table scan.
1.Верно ли что можно ускорить данный запрос добавив колонку my_value в sorting key? НО: ALTER TABLE test MODIFY ORDER BY (my_key, my_value) не работает с существующими колонками.
2. И тогда единственным решением будет пересоздание таблицы с правильным ORDER BY ?
Вы же можете вторичный скипиндекс добавить. Эффективность работы которого очень зависит от того как у вас значиния распределены
Скип индекс я так понимаю подойдет только если данные в my_value хоть как-то отсортированы, но они там рандомно распределены.
у вас между key и value связь один-ко-многим или один-к-одному?
Поможет высокая кардинальность значений my_value. Но скорость запросов все равно будет ниже, чем с первичным ключом.
Обсуждают сегодня