Немає нічого поганого з GUID як ключі та кластери в системі OLTP (якщо тільки у вас на столі немало індексів, які страждають від збільшення розміру кластера). Власне кажучи, вони набагато масштабніші, ніж стовпці Ідентифікатор.
Поширена думка, що GUID - це велика проблема в SQL Server - багато в чому це просто неправильно. Власне кажучи, GUID може бути значно більш масштабованим на коробках з більш ніж 8 ядрами:
Вибачте, але ваші розробники мають рацію. Переживайте за інші речі, перш ніж турбуватися про GUID.
Ну, і нарешті: чому ви хочете в першу чергу індексу кластерів? Якщо вас турбує система OLTP з безліччю невеликих індексів, вам, швидше за все, краще з купою.
Давайте тепер розглянемо, що фрагментація (яку введе GUID) для ваших читань. Існує три основні проблеми з фрагментацією:
- Сторінка розділяє вартість вводу / виводу диска
- Половина повних сторінок не настільки ефективна, як пам’ять
- Це призводить до того, що сторінки зберігаються не в порядку, що робить послідовні введення / виведення менш ймовірними
Оскільки ваше питання стосується масштабованості, яку ми можемо визначити як "Додавання більшої кількості апаратних засобів робить систему швидшою", це найменша проблема. Звертатися до кожного по черзі
Оголошення 1) Якщо ви хочете масштабу, тоді ви можете дозволити собі придбати введення / виведення. Навіть дешевий SSD-диск Samsung / Intel 512 Гб (при кількох доларах США / ГБ) отримає вам понад 100 КБ IOPS. Ви не будете споживати цього незабаром на 2 розетковій системі. І якщо вам доведеться зіткнутися з цим, придбайте ще один, і ви налаштовані
Оголошення 2) Якщо ви видалите таблицю, у будь-якому випадку у вас буде половина повних сторінок. І навіть якщо ви цього не зробите, пам'ять дешева і для всіх, окрім найбільших OLTP-систем - гарячі дані повинні вміщуватися там. Потрібно упакувати більше даних на сторінки, не оптимізуючи їх під час пошуку масштабу.
Оголошення 3) Таблиця, побудована з часто розділених сторінок, сильно фрагментованих даних робить випадкові введення-виведення з тією ж швидкістю, що і послідовно заповнені таблиці
Що стосується вступу, є два основних типи приєднання, які ви, швидше за все, побачите в OLTP, як завантаженість: Хеш і петля. Давайте розглянемо кожного по черзі:
Хеш-з'єднання: хеш-з'єднання передбачає, що маленька таблиця сканується, а більша - зазвичай шукається. Невеликі таблиці, ймовірно, знаходяться в пам’яті, тому введення-виведення тут не стосується вас. Ми вже торкнулися того факту, що прагнення мають таку саму вартість у фрагментованому індексі, як у не фрагментованому індексі
Приєднання до циклу: буде показана зовнішня таблиця. Така ж вартість
Можливо, у вас також відбувається багато поганого сканування таблиці, але тоді GUID знову не викликає ваших проблем, правильна індексація.
Тепер у вас можуть бути законні сканування діапазону (особливо при приєднанні до зовнішніх ключів), і в цьому випадку фрагментовані дані менш "запаковані" порівняно з не фрагментованими даними. Але давайте розглянемо, які приєднання ви, ймовірно, побачите у добре індексованих даних 3NF:
З'єднання з таблиці, яка містить посилання на зовнішній ключ до первинного ключа таблиці, на яку вона посилається
Навпаки
Оголошення 1) У цьому випадку ви збираєтесь одночасно шукати основний ключ - приєднавшись до n до 1. Фрагментація чи ні, однакова вартість (одна спроба)
Оголошення 2) У цьому випадку ви приєднуєтесь до одного і того ж ключа, але можете отримати більше, ніж один рядок (діапазон пошуку). Приєднання в цьому випадку становить від 1 до n. Однак в іноземній таблиці, яку ви шукаєте, ви шукаєте ключ SAME, який так само ймовірно буде на тій самій сторінці у фрагментованому покажчику, що і на не фрагментованій.
Розгляньте на хвилинку ці закордонні ключі. Навіть якби у вас були "ідеально" послідовні закладені наші основні ключі - все, що вказує на цей ключ, все одно буде не послідовним.
Звичайно, можливо, ви працюєте на віртуальній машині в якомусь SAN в якомусь банку, який коштує дешево і на високому рівні. Тоді вся ця порада буде втрачена. Але якщо це ваш світ, масштабування, ймовірно, не те, що ви шукаєте - ви шукаєте продуктивність та високу швидкість / вартість - які є різними речами.