Кластеризовані індекси магазинного стовпця та зовнішні ключі


18

Я налаштування продуктивності сховища даних за допомогою індексів. Я досить новачок у SQL Server 2014.Microsoft описує наступне:

"Ми розглядаємо кластерний індекс стовпців стовпців як стандарт для зберігання великих таблиць фактів зберігання даних, і очікуємо, що він буде використовуватися в більшості сценаріїв зберігання даних. Оскільки кластерний індекс зберігання стовпців є оновленим, ваше навантаження може виконати велику кількість вставок, оновлень, та видаліть операції. " http://msdn.microsoft.com/en-us/library/gg492088.aspx

Однак якщо ви прочитаєте далі в документації, ви знайдете обмеження та обмеження:

"Неможливо мати унікальні обмеження, обмеження первинного ключа або обмеження зовнішнього ключа."

Це мене дуже бентежить! Добра практика (не обов'язкова) мати зовнішні ключі в сховищі даних з різних причин (цілісність даних, відносини, видимі для семантичного рівня ...)

Отже, Microsoft виступає за кластеризовані індекси стовпців для сховищ даних; однак вона не може впоратися із зовнішніми ключовими відносинами ?!

Чи правильно я в цьому ставлюсь? Які ще підходи ви порадили б? Раніше я використовував некластеризований індекс зберігання стовпців у сценаріях сховища даних, із падінням та перебудовою для завантаження даних. Однак SQL Server 2014 тоді не додає нової реальної цінності для сховищ даних ??


По мірі того, як функція дозріває, ви побачите, що все більше цих функцій стає підтримуваним (чорт, у 2012 році, індекси магазину стовпців читали лише!). Тим часом, вам пропонують компроміс - чудова ефективність з обмеженнями, або така ж стара стара. Я також не вірю, що вони мали намір це означати, що кожна таблиця у вашому DW повинна мати кластерні індекси стовпців і що жодна таблиця не повинна мати жодних обмежень - напевно, обмежена кількість таблиць у будь-якому DW, що може дати вам величезний удар для долар.
Аарон Бертран

3
Остерігайся - він може впоратися з приєднаннями. Зв'язки з ФК абсолютно не потрібні для приєднання. Саме там можна обробляти референтну цілісність - що приємно мати, але в сховищі даних МОЖЕ бути пропущено. Загрожує ризиком, так, але також із збільшенням продуктивності.
TomTom

8
Також - "немає реальної нової цінності"? Ти маєш на увазі те, що ти можеш писати записи та кластери, не схожий на покращення? Якщо користувачі зможуть запитувати дані в режимі реального часу замість того, щоб чекати краплі та перебудувати, щоб отримати більш актуальні дані, не здається для ваших користувачів непоганою справою та меншим обслуговуванням для вас? знизати плечима
Аарон Бертран

Ви можете мати (унікальні) індекси, створивши індексований вигляд. Здається, інфраструктура для обслуговування індексу вже є. Просто звичайні індекси ще не реалізовані.
usr

@AaronBertrand У сценарії DWH з таблицями фактів із зовнішнім ключем індекс Clustered Columnstore не працює. Це в значній мірі на відміну від Microsoft, яка очікує, що це як стандарт для зберігання великих таблиць фактів. Сподіваюся, ви можете мені довести неправильність ...? Тому що мені подобається SQL Server.
OverflowStack

Відповіді:


13

У вас тут багато питань:

З: (Відсутність сторонніх ключів) мене дуже бентежить! Доброю практикою (не обов'язковою) є наявність Fk в DWH з різних причин (цілісність даних, відносини, видимі для семантичного шару, ....)

Відповідь: Правильно, звичайно є хорошою практикою мати сторонні ключі в сховищі даних. Однак, кластерні індекси стовпців ще не підтримують це.

З: Отже, MS виступає за індекси зберігання кластерних стовпців для сценаріїв DWH, однак вона не може обробити стосунки з FK ?!

Відповідь: Microsoft надає вам інструменти. Ви вирішуєте, як ви використовуєте ці інструменти.

Якщо найбільшою вашою проблемою є відсутність цілісності даних у вашому сховищі даних, то потрібний інструмент - це звичайні таблиці із зовнішніми ключами.

Якщо найбільшою вашою проблемою є виконання запитів, і ви готові перевірити власну цілісність даних у рамках процесу завантаження, то потрібний інструмент - це кластеризовані індекси стовпців.

Q: Однак SQL 2014, ніж додає ніякого реального нового значення для DWH ??

Відповідь: На щастя, кластерний стовпчик не був єдиною новою функцією в SQL Server 2014. Наприклад, ознайомтеся з новим оцінкою кардинальності.

Питання: Чому я настільки злий і гіркий щодо способу реалізації моєї улюбленої функції?

Відповідь: Ти мене зловив - ти насправді не задавав це питання - але я все одно відповім на нього. Ласкаво просимо у світ програмного забезпечення сторонніх виробників, де не все створено відповідно до ваших точних специфікацій. Якщо ви пристрасно ставитесь до змін, які хотіли б побачити у продукті Microsoft, перегляньте Connect.Microsoft.com . Це процес їх зворотного зв’язку, де ви можете подати зміни, інші люди можуть проголосувати за неї, а потім команда продукту читає її і повідомляє, чому вони не застосовуватимуть її. Іноді. Більшість випадків вони просто відзначають це як "не виправить, працює на моїй машині", але так, іноді ви отримуєте відповіді.


"Правильно, зазвичай є хорошою практикою мати зовнішні ключі у сховищі даних" -> SQLCAT - Топ-10 найкращих практик для створення великого масштабного реляційного сховища даних ... "Створіть некластеризовані індекси для кожного зовнішнього ключа." -> Нічого щодо примусового використання відносин FK, згаданих у посиланні, а non-CI є надмірним через колонку, так що вказували б на відсутність потреби у FK на таблиці фактів, погодьтесь ви? Цікавитеся вашими думками з цього приводу.
Адріан Торрі

1
... і щодо розмірів: "Уникайте примусових зв'язків між зовнішніми ключами між фактами та таблицями розмірів, щоб дозволити швидше завантажувати дані. Ви можете створювати обмеження зовнішніх ключів за допомогою NOCHECK для документування взаємозв'язків, але не застосовувати їх. Забезпечуйте цілісність даних хоча трансформуйте пошук, або виконайте перевірку цілісності даних у джерела даних "
Адріан Торрі

6

Я можу зрозуміти, що ти відчуваєш, що деякі фрагменти, яких ти звик, відсутні. Але це лише тому, що вони відсутні.

Тим не менш, SQL Server успішно використовувався, коли Foreign Keys були лише концепцією (яку ми реалізували через тригери в ті часи), а не фізичною реалізацією, такою як обмеження. Декларативна референтна цілісність була принаймні за допомогою SQL Server 7.0, але значно слабша, ніж поточна реалізація.

Щодо значення індексу Clustered ColumnStore, він дає індекс, а рядки можна оновити. Ви можете вважати це обговорення цінним: http://sqlwithmanoj.com/2014/07/24/maintain-uniqueness-with-clustered-columnstore-index-sql-server-2014/

Маной зазначає, що існує спосіб створити індексований / матеріалізований вигляд у верхній частині цієї таблиці, з кластером клавіш як ПК (перший стовпець таблиці / подання). Зрозуміло, що це вам підходить, звичайно, це рішення, яке ви повинні прийняти.

Але, як коментували Аарон Бертран та TomTom, це все стосується кращої продуктивності. Якщо ви можете управляти і іншими питаннями , які хвилюють вас (і я вважаємо , що вони є керованими) , то ви отримаєте чимало переваг. Тому використовуйте ColumnStore для того, що вмієте робити та керувати відсутніми функціями самостійно.


2

Це питання стосується SQL 2014, але я хочу надати додаткову інформацію з огляду на зміни, внесені в SQL 2016 до індексів стовпців, тому що в різних версіях обмеження може бути важким, і це питання все ще досить високе в Google:

Для SQL 2016 Microsoft описує метод використання некластеризованих btree-індексів (які тепер можна додавати як вторинні індекси в кластерну таблицю стовпців стовпців) для забезпечення обмежень зовнішніх ключів, за умови, що обмеження додано до індексу зберігання стовпців: https: // docs .microsoft.com / en-us / sql / реляційні бази даних / індекси / колонки-індекси-дизайн-вказівки

Ніко Неугебауер також має допис у блозі про це; насправді можливо безпосередньо створити унікальні / зарубіжні обмеження на столах стовпців (я застосовую такий підхід у своїй роботі): http://www.nikoport.com/2015/09/15/columnstore-indexes-part-66- more-clustered-columnstore-Improve-in-sql-server-2016 /

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.