Все, що потрібно знати про індекси MS SQL
Пропонуємо розширити знання про індекси у MS SQL Server. Отримайте повне уявлення про них, переваги використання, структуру. Дізнаєтеся, як створювати індекси, оптимізувати та видаляти. Все найкорисніше читайте в одній статті.
Що таке індекси в SQL Server
Розберемося у понятті індексів (indexes) – це спеціальні таблиці, використовувані пошуковими системами для пошуку даних. Їх активне використання грає найважливішу роль підвищенні продуктивності sql серверів.
Немов покажчик у грамотно складеній книзі індекс допомагає швидко отримати доступ до рядків необхідних даних у таблиці, що відповідають запиту. Таким чином їх використання дозволяє прискорити виконання необхідного запиту.
Наприклад, щоб отримати всі сторінки в книзі, що стосуються обраної тематики, спочатку потрібно звернутися до переліку тем, а потім вибрати потрібні сторінки. Для цього слід створити індекс з обраної теми. На її основі й вибиратимуться посилання на сторінки книги на тему. Використовуючи значення, задані первинним ключем, SQL Server знайде потрібний індекс і з його допомогою швидко вибере всі рядки з необхідними даними. Якщо не використовувати індекс, то для пошуку інформації буде здійснено сканування кожного рядка таблиці. Це значно знизить продуктивність та збільшить час пошуку.
Завдяки індексу процес пошуку даних скорочується з допомогою їх упорядкування як фізичного, і логічного. Таким чином, він виглядає як набір посилань на дані, які впорядковані вибраним стовпцем таблиці. Такий стовпець називається індексованим.Індекси знаходяться в таблиці і по суті виступають корисними внутрішніми механізмами системи SQL-сервера, які допомагають зробити доступ до даних найбільш оптимальним.
Створити стандартний індекс можна на всіх стовпцях даних, крім:
- стовпців, які використовуються для зберігання даних об'єктів, що мають великі розміри (LOB): TEXT, IMAGE, VARCHAR (MAX);
- представлених у XML. Для роботи з даними представлені в такому форматі використовуються xml-index, які відрізняються від стандартних. Про них наведено нижче.
Про індекси та купи
Як тільки таблиця створена і в ній ще немає індексів, вона виглядає як купа даних (Heap). У ньому всі записи зберігаються хаотично, без певного порядку. Тому їх і називають купами.
Якщо в таблиці необхідно знайти певні дані, SQL Server просканує її (Table scan). Поки в таблиці не задані індекси, що підтримують обмеження (UNIQUE CONSTRAINT, UNIQUE INDEX або PRIMARY KEY), сервер прочитає всі табличні записи (з першої до останньої) і вибере ті, які відповідають умовам пошуку.
Це демонструє базові функції indexes:
- підвищення швидкості пошуку інформації та продуктивності запитів;
- збереження цілісності даних через забезпечення унікальності рядків таблиці.
Не завжди індекс допомагає прискорити пошук інформації. Для таблиць невеликих розмірів звичайний перебір даних може виявитися набагато ефективнішим за вибірку даних за індексами.
Indexes мають і недоліки:
- потрібно багато місця на дисковому просторі та в оперативній пам'яті. Чим довший ключ, тим більшого розміру індекс та місце для його зберігання;
- уповільнюється продуктивність системи (повільніше виконуються операції вставок, оновлення чи видалення записів).
Але сучасні методи їх створення дозволяють не лише знижувати негативний ефект для перерахованих вище операцій, а й збільшувати швидкість виконання.
Структура
Усі індекси мають однакову структуру (structure). Вони складаються з:
- наборів сторінок;
- вузлів, які мають деревоподібну структуру, ієрархічну за природою.
Усі вони зберігаються як збалансованих B-дерев (B-tree). Початок такого дерева розташований у кореневому вузлі (що знаходиться на вершині ієрархії) і по суті є «вхідними дверима». Цей вузол має одну сторінку, де містяться вказівники на ключі наступних рівнів.
У нижній частині ієрархії розташоване листя дерева (що є кінцевими вузлами). Довжини гілок однакові.
У такому дереві збалансовано кожну гілку. Завдяки внутрішньому механізму за будь-яких змін у таблиці дерево знову стає збалансованим.
При формуванні запиту до індексованого стовпця підсистема починає процес пошуку з верхнього вузла до нижніх, проходячи проміжні та обробляючи їх. На кожному рівні розташовується все більш розгорнута інформація про дані, що запитуються. Як досягається нижній рівень листя (leaf level) пошук припиняється, т.к. підсистема запитів знаходить потрібне значення.
Типи індексів
У Microsoft SQL Server використовуються такі індекси: кластерні та некластерні. Розглянемо їх докладніше.
Кластерний індекс
Основне його завдання - збереження табличних даних у вигляді, відсортованому за значенням ключа. Таблиці або подання може бути притаманний лише єдиний кластеризований індекс (Clustered index), тому що табличні дані можуть відсортуватися в єдиному можливому порядку - або зростання, або зменшення. По можливості, кожна таблиця має бути Clustered index.
Табличні дані зберігатимуться відсортованими лише тому випадку, коли таблиця має кластеризований індекс. Рядки табличних даних Clustered index зберігає у рівнях листя.
Якщо таблиця не має Clustered index, у момент формування обмежень PRIMARY KEY і UNIQUE, він формується автоматично. Коли для таблиць/ куп створено Nonclustered indexes, то в процесі створення Clustered index всі некластеризовані повинні бути перебудовані.
Вміст листя залежить від того, чи кластерний індекс, чи некластерний. Вони можуть містити як табличні дані, і посилання, що вказують на рядки з ними.
Некластерний індекс
Некластеризованими (Nonclustered) називають такі індекси, які містять:
- значення ключів – ключові стовпці, якими вони визначені;
- покажчики на рядки у таблиці, що містять реальні дані (значення ключа).
Щоб виявити і отримати дані, що запитуються, для системи підзапитів буде потрібно здійснення додаткових операцій. Вміст покажчиків на дані, що запитуються, повністю залежить від того, як вони зберігаються.
Він може вказувати на:
- купу і тим самим приводити до ідентифікатора рядки з даними, що шукаються;
- таблицю з Clustered index, вказуючи, що саме він використовується для пошуку дійсних даних.
Nonclustered indexes можуть бути розширені додатковими стовпцями (included column). Отже, листя зберігатимуть значення індексованих і додаткових неіндексованих стовпців. Ця властивість дозволяє обійти певні обмеження, покладені на індекс. Даний підхід дозволяє включати стовпці, що не індексуються, або обходити обмеження на довжину індексу.
Основні характеристики Nonclustered indexes:
- їх не можна відсортувати;
- на таблицю чи подання можна сформувати понад один (до 999) некластеризованих індексів. Але не варто створювати максимальну кількість Nonclustered indexes. Слід пам'ятати, що вони здатні як підвищити, і знизити продуктивність.
Nonclustered indexes можуть створюватися будь-яких таблицях, зокрема і мають кластерний індекс.
Спеціальні типи індексів
Існує велика кількість спеціальних індексів, які можуть бути кластерними, так і некластерними. Розглянемо деякі з них.
Фільтрований
Фільтрований (Filtered) індексом називають оптимізований Nonclustered index, в якому задіяний предикат фільтра для індексації частини рядків у таблиці.
Ретельно спроектований Filtered index здатний:
- збільшити продуктивність;
- зменшити витрати на обслуговування та зберігання індексів.
Складовий
Складовим називають індекс, який:
- може включати більше одного (до 16) стовпців, які є ключовими значеннями;
- обмежується загальною довжиною (що не перевищує 900 байт);
- містить поля, що належать до єдиної таблиці.
Прості індекси, на відміну від складових, створюються лише за єдиним стовпцем.
Створення складових індексів доцільно, коли:
- для пошукового запиту ключами виступають два і більше шпальт;
- у пошуковому запиті використовуються всі поля складового індексу. Пошуковий запит, у якому не задіяні всі поля, найімовірніше, не використовуватиметься.
Відмінним прикладом може бути телефонний довідник. Він сформований на прізвище та ім'я, т.к. багато людей мають однакове прізвище. Отже, логічно буде створити індекс одночасно і на прізвище, і на ім'я.
Зазначимо, що найвищий пріоритет у процесі сортування належить першим колонкам, що описуються у CREATE INDEX.Тому, серед перших повинні вказуватись колонки унікальні. Щоб індекс був задіяний під час вибірки даних у таблиці, сам запит обов'язково має посилатися саме на колонку, вказану першою.
Використання складових індексів допоможе збільшити продуктивність за рахунок того, що для пошуку даних сервер скануватиме тільки його, що допоможе знизити в таблиці число індексів.
Query Optimizer використовує їх у залежності від структури запиту.
Унікальний
Унікальним (Unique) називають індекс, що забезпечує унікальне значення всіх рядків за певним ключем і гарантує, що в ключі індексу не буде значень однакових, що повторюються. Для складового ключа поняття унікальності стосується всіх index columns, але поширюється кожен стовпець окремо.
Якщо в таблиці формується Unique index одночасно по ряду стовпців, це означає, що кожна варіація значень у ключі буде унікальною.
SQL сервером створюється автоматично Unique index для ключових стовпців для формування обмежень UNIQUE чи PRIMARY KEY. Але він формується лише за умови відсутності дублів у ключових стовпцях таблиці.
Унікальний індекс створюється автоматично для визначення обмежень стовпця:
- первинним ключем (на один стовпець або одночасно на кілька), за умови, що кластерний індекс раніше не створювався. У тому випадку, коли він таки вже створений, сервер створить унікальний некластерний індекс за первинним ключем;
- обмеженням унікальність значень – сервером створюється Unique Nonclustered index. Коли кластерний індекс не був сформований заздалегідь, існує можливість створення саме Unique Clustered index.
Колонковий
Колонковим (Columnstore) називають індекс, у якому дані зберігаються у стовпцях.Використання Columnstore indexes найбільше доцільно застосовувати для великих сховищ, т.к. вони допоможуть:
- продуктивність запитів збільшити у кілька разів;
- розміри даних зменшити (завдяки їх стиску).
Просторовий
Просторовим (Spatial) називають тип розширеного індексу, що дозволяє індексувати стовпці з просторовими даними (представлені у типах Geography чи Geometry). Spatial index дозволяє якнайкраще використовувати певні операції запитів щодо просторових стовпців і може створюватися тільки для них.
Основною умовою створення просторового індексу є наявність PRIMARY KEY для таблиць.
Повнотекстовий
Повнотекстові (Full-text) індекси застосовуються підвищення ефективності пошуку певних слів у рядках, де дані представлені у символах.
Дії створення та обслуговування Full-text indexes називаються «заповненнями». Зустрічаються заповнення:
- повне - здійснюється SQL сервер після створення нового Full-text index. Розмір таблиці впливає на потрібний обсяг ресурсів. При збільшенні розміру операцію потрібні ресурси більшого розміру. Тому передбачена можливість відкладання цього процесу;
- засноване на відстеження змін – застосовується для того, щоб обслуговувати Full-text index після повного заповнення (початкового).
Покриваючий
Покриваючим (Covering) називають індекс, що дозволяє на конкретний запит отримувати інформацію в повному обсязі з листя індексу, не звертаючись до записів таблиці. Отже, в Covering index зберігається достатній обсяг даних для повноцінної відповіді на запит. Тому не потрібно звертатися до таблиці.
Завдяки тому, що відповідь можна отримати без використання таблиці, що покривають індекси швидше за інших.Однак вони стають досить великими, тому зловживати ними не варто.
XML-індекс
XML - специфічний тип індексу, призначений для роботи з даними у стовпцях таблиці, представленими у відповідному форматі. Він робить ефективнішою обробку пошукових запитів до них.
- первинні – індексують, зберігають у стовпцях XML теги, шляхи, значення. Доцільно створювати, коли таблиця первинного ключа має кластерний індекс;
- вторинні – створюються лише таблиць з первинним XML-index. Застосовуються для збільшення продуктивності системи за певним типом звернення до стовпців XML. Зустрічаються типи XML-indexes: PATH, VALUE, PROPERTY.
Індекси, що використовуються в оптимізованих таблицях
Активно використовуються спеціальні індекси для таблиць даних:
- оптимізовані для пам'яті (In-Memory OLTP). До таких відносяться Хеш індекси (Hash);
- Nonclustered indexes, які спеціально створюються для сканування (як упорядкованого, і діапазонного) і оптимізуються для пам'яті.
Створення та проектування індексів у ms sql server
Користь індексів є очевидною, тому й проектуватися вони повинні вкрай акуратно. Створені ретельно здатні покращити продуктивність, а непрофесійно – знизити.
Індекси займають чимало дискового місця, тому немає сенсу створювати їх більше, ніж потрібно. Більш того, при кожному оновленні рядків автоматично оновлюються і індекси. Це, у свою чергу, може вимагати збільшення ресурсів і загрожувати зниженням продуктивності.
Дуже важливо при проектуванні дотримуватись низки вимог як до баз даних, так і до запитів направлених до них.
Бази даних
Як сказано вище, продуктивність системи залежить від індексів.При надходженні запиту можуть збільшувати її, забезпечуючи швидкий пошук даних чи знижувати, т.к. при кожній операції з даними будуть змінюватися і вони, щоб відображати події, що проводяться над даними. І не важливо, що відбувається з ними – додавання, видалення чи оновлення.
Тому при розробці плану стратегії з індексування необхідно дотримуватися порад фахівців:
- Якщо передбачається часте оновлення даних у таблиці, для неї потрібно застосовувати мінімум індексів.
- Для таблиці зі значною кількістю даних, які, ймовірно, будуть рідко змінюватися, можна використовувати ту кількість індексів, яка покращить продуктивність запитів. Але для таблиць невеликого обсягу який завжди доцільно взагалі їх використовувати. Такий пошук може виконуватися довше, ніж звичайне сканування таблиці.
- Для Clustered indexes використовуйте найкоротші поля, які лише допустимі. Найкраще їх застосовувати на стовпцях з унікальними значеннями та в яких не допускається використання NULL. З цієї причини найчастіше PRIMARY KEY виступає у ролі Clustered index.
- Продуктивність індексу залежить від того, наскільки унікальні значення в стовпці. Вона знижується зі збільшенням дублів, якщо в стовпці і росте зі зменшенням. Тому при кожній нагоді слід використовувати унікальний індекс.
- Якщо використовується складовий індекс, то потрібно враховувати порядок стовпців. Першими йдуть ті, у яких у виразах використовується WHERE. За ними – стовпці із найвищими показниками унікальних значень. Інші вишиковуються у міру зниження цього показника.
- Допускається використання індексу на обчислюваних стовпцях таблиці, але лише за умови дотримання певних вимог (для обчислення значень такого стовпця можуть використовуватися лише детерміністичні вирази, тобто результат для певного набору параметрів, що входять, завжди повинен бути однаковим).
Запити до бази даних
p align="justify"> При проектуванні другим важливим пунктом є розуміння та облік того, які виконуються запити до бази даних. Необхідно враховувати частоту зміни даних, а також потрібне дотримання певних принципів:
- Переважно, щоб один запит містив найбільше число рядків, ніж розбивати їх на відповідне число окремих запитів.
- На стовпцях, що використовуються в запитах з WHERE найчастіше, краще створювати Nonclustered index як умову пошуку та з'єднання в JOIN.
- Слід скористатися можливостями індексування стовпців, які у пошукових запитах відповідність конкретним значенням.
Способи створення індексів
Передбачено створення індексів ms sql server за допомогою двох інструментів. У цьому допоможуть:
- SSMS (MSSQL Management Studio);
- спеціальна мова Transact-SQL (T-SQL, що підтримує Paging Queries).
Як створити кластеризований індекс
Як зазначалося вище, створення кластеризованого індексу SQL сервером відбувається автоматично, коли певний стовпець вибирається як первинний ключ (PRIMARY KEY). Коли такого немає, слід створити кластерний індекс своїми руками.
Щоб створити Clustered index, скористаємося Management Studio. Для цього випливає:
- Відкрити SSMS.
- Скориставшись браузером вибрати відповідну таблицю.
- Зупинившись на пункті «Індекси» клацнути мишкою.
- Вибрати «Створити індекс» та відповідний тип (вибираємо «Кластеризований»).
- У новому вікні з'явиться форма "Новий індекс". Тут потрібно вписати найменування нового створюваного індексу (в рамках однієї таблиці потрібно, щоб воно було унікальним). Поставити галочку, що вона унікальна.
- Вибрати стовпець, який буде ключем індексу. Він ляже в основу створюваного Clustered index. Провести сортування рядків табличних даних кнопкою «Додати».
- Після введення всіх потрібних параметрів клацнути «ОК».
Результатом дій стане кластерний індекс.
Він може бути створений за допомогою інструкцій Transact-SQL CREATRE INDEX.
Як створити некластеризований індекс
Для створення Nonclustered index можна скористатися Management Studio або інструкціями T-SQL.
Створення Nonclustered index із включеними стовпцями
Торкнімося питання, як створити Nonclustered index з умовою, що до індексу включені стовпці, які не є ключовими. Такий індекс прийнято використовувати у випадках, коли індекс створюється під конкретний запит. Наприклад, щоб індексом покривався запит повністю, тобто. включав усі стовпці. Внаслідок того, що запит покритий, збільшується продуктивність. Це стає можливим завдяки тому, що оптимізатор запитів може набути всіх значень стовпців в індексі без звернення до табличних даних. Це призводить до зменшення кількості операцій вводу-виводу на диску.
Проте варто враховувати, що з включенням до індексу неключових стовпців розмір його збільшується. Отже, для його зберігання знадобиться більше дискового простору.Це також може знизити продуктивність операцій INSERT, UPDATE, DELETE та MERGE у базовій таблиці даних.
Для його створення також скористаємося Management Studio:
- Відкрити SSMS.
- Скориставшись браузером вибрати потрібну таблицю і клацнути мишкою по пункту «Індекси».
- Вибрати "Створити індекс", а потім "Некластеризований" (не ставити галочку на унікальності).
- У формі «Новий індекс», що відкрилася, вписати найменування нового індексу, додати один або кілька ключових стовпців, скориставшись кнопкою «Додати».
- Перейти до вкладки «Увімкнено стовпці». Додати всі стовпці, які мають бути включені до індексу, скориставшись кнопкою «Додати».
- Коли введено всі потрібні параметри, натисніть «ОК».
При необхідності, можна легко створити Nonclustered index, що фільтрується. Для цього слід скористатися T-SQL і в операторі CREATE NONCLUSTERED INDEX WHERE вказати умову фільтрації. Так можна відфільтрувати практично будь-які дані, не важливі у запитах.
Видалення індексу
Настав час дізнатися про те, якими способами можуть видалятися індекси. Для початку скористаємося Management Studio. Для цього необхідно:
- Відкрити SSMS.
- Вибрати індекс для видалення.
- Клацнути мишкою по ньому та зі списку вибрати «Видалити».
- Виконану дію підтвердити натисканням ОК.
Видалення індексів виконується за допомогою інструкцій T-SQL DROP INDEX (DROP INDEX IX_NonClustered ON TestTable). Проте нею не можна скористатися видалення тих індексів, які створювалися через формування обмежень PRIMARY KEY і UNIQUE. Щоб видалити їх, скористайтеся інструкцією ALTER TABLE з пропозицією DROP CONSTRAINT.
Як змінити значення коефіцієнта, який встановлено за замовчуванням
Щоб внести зміни до значення коефіцієнта, які встановлені за умовчанням, слід скористатися:
- SSMS;
- інструкцією T-SQL, виконавши запуск системної збереженої процедури;
- sp configure.
Особливості індексів та умов пропозиції WHERE
Якщо пропозиція WHERE інструкції SELECT містить умову пошуку даних з одним стовпцем, то необхідно для неї створити індекс.
Але він буде абсолютно марним при постійному рівні селективності від 80% і вище.
Якщо в запиті, що часто використовується, умова пошуку включає оператор AND, то найкраще – створити складовий індекс, включивши в нього відразу всі табличні стовпці, які вказувалися в пропозиції WHERE інструкції SELECT.
Оптимізація індексів
Після виконання будь-яких дій з табличними даними SQL Server в той же момент проводяться відповідні правки в індексах. Через деякий час всі подібні виправлення можуть спровокувати фрагментацію даних.
Подібна фрагментація даних може стати причиною зниження продуктивності. Тому вкрай важливо час від часу проводити дефрагментацію.
Щоб зрозуміти, яку саме операцію потрібно провести – реорганізацію чи перебудову, слід з'ясувати рівень фрагментації даних. Вона допоможе зрозуміти, який спосіб дефрагментації буде найефективнішим і що вибрати.
Щоб з'ясувати рівень фрагментації, слід скористатися системною табличною функцією sys.dm_db_index_physical_stats.Для визначення рівня фрагментації всього переліку таблиць для обраної бази можете скористатися наступним запитом:
SELECT OBJECT_NAME(T1.object_id) AS NameTable,
T1.index_id AS IndexId,
T1.avg_fragmentation_in_percent AS Fragmentation
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS T1
LEFT JOIN sys.indexes AS T2 ON T1.object_id = T2.object_id AND T1.index_id = T2.index_id
Згідно з рекомендаціями Microsoft, наступні дії залежатимуть від рівня фрагментації:
- менше 5% - про дефрагментацію слід поки що забути;
- від 5 до 30% потрібно виконати реорганізацію індексу. Це вимагатиме мінімальної кількості ресурсів системи та її можна провести без довготривалого блокування;
- понад 30% - слід виконати перебудову індексу. При значному рівні фрагментації це найефективніше.
Реорганізація індексу
Реорганізацією називають процес усунення фрагментації індексу. У його ході відбувається дефрагментація кінцевого рівня кластерних та некластерних індексів за таблицями та уявленнями. Говорячи простою мовою – виконується просте перевпорядкування сторінок. В основі переупорядкування лежить логічний порядок кінцевих вузлів (виконуєте зліва направо).
Якщо хочете провести реорганізацію – скористайтесь:
- MSSQL Management Studio. На вибраному індексі слід клацнути мишкою, зі списку вибрати та натиснути "Реорганізувати";
- відповідними інструкціями T-SQL.
Перебудова індексу
Перебудова називається операція з усунення фрагментації індексу. Він полягає в усуненні старого та формуванні нового.
Перебудова індексу виконується декількома способами. У цьому допоможе:
- Management Studio.Для цього необхідно вибрати потрібний індекс, мишкою клікнути по ньому та вибрати "Перебудувати";
- інструкція ALTER INDEX ix з пропозицією REBUILD, яка є заміною інструкції DBCC DBREINDEX. Нею користуються, коли виникла потреба у масштабній операції;
- інструкція CREATE NONCLUSTERED INDEX (CREATE INDEX) із пропозицією DROP_EXISTING. Підходить, щоб перебудувати індекс та змінити його визначення (видалити або додати ключові стовпці).
Це вся корисна інформація щодо індексів у Microsoft SQL Server. Вивчайте їх, а якщо виникнуть питання – ставте. Успіхи у вивченні та застосуванні indexes ms sql.
Створення некластеризованих індексів
Некластеризовані індекси можна створювати в SQL Server за допомогою SQL Server Management Studio або Transact-SQL. Некластеризований індекс - це структура індексу, відокремлена від даних, що зберігаються в таблиці, і переупорядковує один або кілька виділених стовпців. Некластеризовані індекси часто допомагають швидше знаходити дані, ніж пошук базової таблиці; Іноді запити можуть повністю відповідати даними в некластеризованому індексі, або некластеризований індекс може вказувати ядро СУБД на рядки в базовій таблиці. Зазвичай некластеризовані індекси створюються з метою підвищення продуктивності запитів, що часто використовуються, не входять до кластеризованого індексу, або для пошуку рядків таблиці, що не має кластеризованого індексу (яка називається купою). Можна створити кілька некластеризованих індексів для таблиці або індексованого подання.
Підготовка до роботи
Типові реалізації
Некластеризовані індекси реалізуються в такий спосіб.
- Обмеження UNIQUE У разі створення обмеження UNIQUE створюється унікальний некластеризований індекс.Він потрібний, щоб примусово застосовувати обмеження UNIQUE за умовчанням. Якщо кластеризований індекс у таблиці ще не створено, можна вказати унікальний кластеризований індекс. Для отримання додаткових відомостей див. у статті Обмеження унікальності та перевірочні обмеження.
- Індекс, що не залежить від обмеження За умовчанням некластеризований індекс створюється у тому випадку, якщо раніше не було встановлено кластеризований індекс. Для таблиці може бути створено трохи більше 999 некластеризованих індексів. Це число включає будь-які індекси, створені обмеженнями PRIMARY KEY або UNIQUE, але не входять XML-індекси.
- Некластеризований індекс в індексованому поданні Некластеризовані індекси у виставі можуть створюватися тільки після створення в ньому унікального кластеризованого індексу. Для отримання додаткових відомостей див. у розділі "Створення індексованих уявлень".
Безпека
Дозволи
Необхідний дозвіл ALTER для таблиці чи подання. Користувач повинен бути членом певної ролі сервера sysadmin або визначених ролей бази даних db_ddladmin і db_owner.
Використання середовища SQL Server Management Studio
Створення некластеризованого індексу за допомогою конструктора таблиць
- У браузері об'єктів розгорніть базу даних, що містить таблицю, в якій необхідно створити некластеризований індекс.
- Розгорніть папку Таблиці.
- Клацніть правою кнопкою миші таблицю, в якій потрібно створити некластеризований індекс, та виберіть пункт Конструктор.
- Клацніть правою кнопкою миші стовпець, для якого потрібно створити некластеризований індекс, та виберіть Індекси/Ключі.
- У діалоговому вікні Індекси та ключі натисніть Додати.
- Виберіть новий індекс у текстовому полі Вибраний первинний/унікальний ключ або індекс .
- У сітці виберіть "Створити як кластеризованийі виберіть "Ні в списку, що розкривається, праворуч від властивості.
- Виберіть Закрити.
- У меню "Файл" виберіть "Зберегтиtable_name".
Створення некластеризованого індексу в браузері об'єктів
- У браузері об'єктів розгорніть базу даних, що містить таблицю, в якій необхідно створити некластеризований індекс.
- Розгорніть папку Таблиці.
- Розгорніть таблицю, для якої потрібно створити некластеризований індекс.
- Клацніть правою кнопкою миші папку Індекси, виберіть Створити індекс і Некластеризований індекс.
- У діалоговому вікні Створення індексу на сторінці Загальні введіть ім'я нового індексу у полі Ім'я індексу .
- У розділі Ключові стовпці індексу виберіть Додати….
- У діалоговому вікні "Вибір стовпців" зtable_name встановіть прапорець або прапорці стовпця таблиці або стовпців, які будуть додані до некластеризованого індексу.
- Натисніть ОК.
- У діалоговому вікні "Створити індекс" натисніть кнопку "ОК".
Використання Transact-SQL
Створення некластеризованого індексу у таблиці за допомогою Transact-SQL
- У оглядач об'єктів підключіться до екземпляра ядро СУБД з AdventureWorks2022 встановленим. Ви можете завантажити AdventureWorks2022 з прикладів баз даних.
- На стандартній панелі виберіть пункт Створити запит.
- Скопіюйте наведений нижче приклад у вікно запиту та натисніть кнопку Виконати.
USE AdventureWorks2022; GO -- Find an existing index Name_ProductVendor_VendorID and delete it if found. IF EXISTS (SELECT name FROM sys.indexes WHERE name = N'IX_ProductVendor_VendorID') DROP INDEX IX_ProductVendor_VendorID ON Purchasing.ProductVendor; GO -- Створити неclustered index називається IX_ProductVendor_VendorID -- на purchasing.ProductVendor table за допомогою BusinessEntityID column. CREATE NONCLUSTERED INDEX IX_ProductVendor_VendorID ON Purchasing.ProductVendor (BusinessEntityID); GO
