У меня очень большая таблица IMO (~ 137 миллионов строк) с множеством повторяющихся данных, множеством NULL
столбцов и тому подобным.
Я рассматриваю возможность изучения этого с использованием таблицы с, COLUMNSTORE INDEX
и у меня есть IDENTITY
столбец в исходной таблице, который является единственным моим столбцом, где каждая строка уникальна.
Должен ли я оставить этот столбец или включить его? Я прочитал, что вы хотите включить все строки вашей таблицы в, COLUMNSTORE INDEX
но я также прочитал, что лучшими кандидатами являются столбцы с большим количеством неуникальных строк.
Это просто плохой кандидат на COLUMNSTORE INDEX
?
Я использую SQL Server 2012, так что это некластеризованное хранилище столбцов. Я просто изучаю возможные способы хранения этих данных. Обновлений не существует, хотя новые строки будут периодически добавляться через процесс ELT, поэтому я предполагаю, что некоторая работа будет выполнена там. Некоторые люди добывают эти данные и генерируют огромные отчеты, много сканируют строки, иногда приводят сервер к сканированию, что вынуждает нас ежедневно выгружать копию на вторичный сервер.
137 million rows
это большой, но управляемый. Вы смотрели на разделение таблицы и размещение ее в разных файловых группах? Индекс ColumnStore в sql 2012 недоступен для записи, поэтому вы столкнетесь с проблемами - вам придется удалить его и создать заново. Я не говорю, что columnstore будет плохо, но лучше изучить и другие варианты.Ответы:
Столбцы идентификаторов действительно не сжимаются в индексах Columnstore в SQL Server 2012 или в SQL Server 2014. Все это будет действительно зависеть от рабочей нагрузки, с которой вы сталкиваетесь. Если ваша рабочая нагрузка будет включать в себя столбец идентификаторов, то вы сможете очень красиво использовать исключение сегментов.
С точки зрения сжатия - Columnstore предоставит вам лучшее сжатие, чем обычно делает страница. Как правило. Пожалуйста, проверьте это, прежде чем перейти к производству.
Самой большой проблемой в SQL Server 2012 будет очень слабая реализация пакетного режима, и вы ничего не можете с этим поделать.
источник
Я не мог удержаться от присоединения к Нико с другим ответом (добро пожаловать, Нико!). В целом, я согласен с Нико, что ограничения пакетного режима в SQL 2012 (если Нико не будет ссылаться на свой блог, я буду :)) могут быть серьезной проблемой. Но если вы можете жить с ними и иметь полный контроль над каждым запросом, который вы пишете к таблице, чтобы тщательно его проверить, columnstore может работать для вас в SQL 2012.
Что касается ваших конкретных вопросов о столбце идентификаторов, я обнаружил, что столбец идентификаторов очень хорошо сжимается, и настоятельно рекомендую включить его в индекс вашего columnstore при любом начальном тестировании. (Обратите внимание, что если столбец идентификаторов также является кластерным индексом вашего b-дерева, он будет автоматически включен в ваш некластеризованный индекс columnstore .)
Для справки, вот размеры, которые я наблюдал для ~ 10MM строк данных столбца идентичности. Склад столбцов, загруженный для оптимального удаления сегментов, сжимается до 26 МБ (по сравнению со 113 МБ для
PAGE
сжатия таблицы хранилища строк), и даже хранилище столбцов, построенное из случайно упорядоченного b-дерева, составляет всего 40 МБ. Таким образом, это демонстрирует огромное преимущество сжатия, даже по сравнению с лучшим сжатием по b-дереву, которое может предложить SQL, и даже если вы не пытаетесь выровнять свои данные для оптимального удаления сегментов (что вы должны сделать, сначала создав b-дерево, а затем построение вашего columnstore сMAXDOP
1).Вот полный сценарий, который я использовал на тот случай, если вы захотите поиграть:
источник