Таким образом, реальность состоит в том, что простые исполняемые ответы часто бывают не идеальными, а лучшим эмпирическим правилом. Вы говорите, что прочитали документы, поэтому я не буду go в деталях. Предположение, лежащее в основе этой рекомендации, заключается в том, что ключ сортировки также является общим предложением where во многих запросах. Это важно для понимания рекомендации, но в целом это правда. У меня много запросов с «где date_col> getdate () - интервал« 1 год »», из которого вы решаете сделать ключ сортировки таблицы «date_col» - очень типично.
Теперь при запуске этого типа запроса узел-лидер Redshift проверит условие where по метаданным блока для столбца date_col. Какие бы блоки не имели желаемых дат внутри них, эти блоки "совпадают". Теперь вы будете смотреть на данные и для других столбцов. Чтобы получить необходимые блоки для этих столбцов, Redshift использует другую часть метаданных для столбца date_col, а именно диапазон номеров строк, которые находятся в каждом соответствующем блоке. Эти диапазоны номеров строк используются для поиска блоков для других столбцов на основе метаданных для этих столбцов. Я надеюсь, что это имеет смысл - найдите блоки, которые соответствуют предложению where, затем найдите блоки в других столбцах. Все это не для чтения блоков, которые не нужны для запроса.
Теперь для примера - если у вас есть таблица с 2 столбцами: 1) столбец ключа сортировки представляет собой INT, и 2) большой varchar , Оба сжаты. Теперь первый столбец (INT) находится в порядке сортировки и будет сильно сжат. Допустим, этот столбец умещается в 1 блок. Другой столбец (большой varchar) занимает 10 блоков. Мы выполняем наш запрос с предложением where в столбце INT, он соответствует 1 блоку, но не номера строк, необходимые в другом столбце, приводят к получению всех 10 блоков. Нет экономии на пропускной способности чтения диска. Но если столбец INT не сжат, он займет больше блоков - скажем, 8 блоков. Тот же запрос будет соответствовать только одному из 8 блоков столбца INT, а перекрестная ссылка номера строки на столбец varchar может совпадать только с 3 из 10 блоков для этого столбца. Теперь мы сократили данные, считанные с диска.
Надеюсь, это имеет смысл. Вы можете видеть, что за этой рекомендацией стоит ряд предположений, которые чаще всего бывают верными. Без этих предположений трудно понять, почему они так говорят. А именно, что ваш ключ сортировки является вашим общим условием where, что сжатие столбца sortkey будет намного лучше, чем в других столбцах, и что данные, хранящиеся в sortkey, меньше, чем данные в других столбцах. И несколько других, но менее центральных.
Помогло ли это?