У меня есть привилегия управлять большой секционированной таблицей OLAP. Просматривая эту таблицу, я заметил, что один из индексов не соответствует схеме разбиения. Поскольку автор недоступен, а тщательно продуманные поиски в Google не дали никаких полезных результатов, я не уверен, было ли это намеренным или случайным.
Есть ли причина не разделять выравнивание индекса на SQL Server 2008?
Ответы:
Основное преимущество не разбиение (не уникальный) индекса на секционированном базовый объекте является то , что она работает вокруг давнего ограничения оптимизатора запросов , связанное с упорядоченными запросами данных , такие как
MIN
,MAX
илиTOP (n)
запросы.На секционированного индекса, оптимизатор вообще не может перевести
MIN
,MAX
илиTOP (n)
в одной и той же операции за перегородкой , с последующей конечной глобальной совокупности более частичных агрегатов за перегородкой. Вместо этого оптимизатор выбирает план выполнения, который сканирует все разделы индекса. Исключением является единственный случай, когда для столбца разделения задается агрегатная или верхняя операция.Я должен упомянуть, что есть также очень веские причины, чтобы не иметь никаких невыровненных индексов. Выбор использования невыровненного индекса должен быть очень осознанным. Я делал это сам (редко) в прошлом, но в очень специфических обстоятельствах, когда выгоды явно перевешивали затраты, или другой разумной альтернативы не было.
Статья Ицик Бен-Гана, объясняющая проблему.
источник
Существует очевидная проблема вокруг некоторых ограничений (например, уникальных), требующих невыровненного индекса.
Помимо этого, невыровненные индексы имеют большую стоимость (в первую очередь они не позволяют многим параллельным операторам переходить от потока к разделу, а альтернативы требуют много памяти), и поэтому я настоятельно рекомендую не использовать такие индексы. Даже с учетом случаев, перечисленных Полом, я бы все же советовал не относящиеся к размеру индексы.
источник
Невыравниваемые индексы сводят на нет основное преимущество разделения, заключающееся в переключении разделов. Если вы не зависите от этого и делите разделы по другим причинам (другое хранилище, разделы только для чтения, инкрементная статистика, ...), тогда продолжайте и создайте невыровненный indexex.
Невыравниваемые индексы полезны, потому что с их помощью можно применять уникальные ограничения для всей таблицы. Кроме того, для невыровненных индексов не требуется, чтобы ключ разделения был неявным префиксом поиска. Представьте, что у вас есть 10000 разделов и запросы не основаны на ключе разделения. В этом случае план выполнения должен будет найти 10000 разделов, если индекс был выровнен. Другие ответы имеют дополнительные примеры.
источник