Мне интересно, оптимизировал ли кто-нибудь таблицу Snowflake для поддержки запросов транзакционного типа и предпринятых вами шагов.
Пример таблицы:
CHILD_ID | PARENT_ID |
---|---|
1 | 9 |
2 | 9 |
3 | 4 |
Пример запроса:
SELECT PARENT_ID
FROM TABLE
WHERE CHILD_ID = 1
Как лучше всего выполнять запросы такого типа? Должен ли я сделать ключ кластеризации для CHILD_ID? Должен ли я запускать эти запросы на хранилище XS? В профиле запроса похоже, что большая часть времени уходит на Инициализацию.
Поскольку CHILD_ID - это все уникальные значения, поэтому я не должен выполнять кластеризацию в соответствии с документацией по снежинкам.
Обратите внимание, что кластеризация «снежинка» отличается от индексации в других традиционных СУБД. Это больше похоже на ключ раздела, который помогает распределять ваши данные, поэтому при его запросе обрезка может помочь получить доступ к меньшему количеству микроразделов, ускорив запрос.
Если вы не делаете просто переписывание для оптимизации запроса, необходим более подробный анализ, если вы хотите применить такие функции, как автоматическая кластеризация, поскольку это повлияет не только на один запрос, но, возможно, на все запросы, обращающиеся к таблице. Это не то, что можно было бы рекомендовать, увидев только один вариант использования таблицы.
Хотя в приведенном выше случае служба оптимизации поиска кажется более подходящим решением. Я обобщил параметры настройки запросов Snowflake ниже, и я думаю, что это может дать вам некоторые идеи: https://medium.com/snowflake/snowflake-accelerate-query-performance-767663b0e5b7
Две вещи, характерные для ключа кластеризации здесь: вы должны выбрать тот, который не имеет всех уникальных значений, и в идеале столбцы ключа кластеризации должны составлять часть предиката. Вы можете обратиться сюда - docs.snowflake.com/ru/user-guide/…