Відключення індексів запобігає доступ користувача до індексів в разі використання кластеризованих індексів до даних базової таблиці. Визначення індексу залишається в метаданих, і статистики індексу зберігаються на некластерізованних індексах. Відключення некластерізованних індексів або кластеризованих індексів в поданні фізично видаляє дані індексу. Відключення кластерізованного індексу таблиці запобігає доступ до даних; дані залишаються в таблиці, але вони недоступні для операцій DML до тих пір, поки не відбувається видалення або перестроювання індексу. Щоб перебудувати і включити відключений індекс, використовуйте інструкцію ALTER INDEX REBUILD або інструкцію CREATE INDEX WITH DROP_EXISTING.
Один або більше індексів можуть виявитися відключеними в наступних ситуаціях:
Компонент SQL Server Database Engine автоматично відключає індекс під час оновлення програми SQL Server.
Індекс відключений вручну за допомогою інструкції ALTER INDEX.
Під час оновлення до нової версії або під час оновлення за допомогою пакета поновлення для SQL Server компонент Database Engine автоматично ідентифікує та відключає індекс, включаючи індекси уявлень, якщо індекс або визначення уявлення містить одну з таких дій:
Вираз, для якого компонент Database Engine не може гарантувати цілісність даних індексу.
Наприклад, припустимо, що в індексі використовується системна функція і під час поновлення функція була змінена таким чином, що тепер вона повертає інший результат. Компонент Database Engine відключить індекс протягом процесу оновлення, тому що індекс може містити дані, які не будуть вірні після оновлення.
Параметри сортування, які змінюються в процесі оновлення таким чином, що індекс паче не сортується правильно.
Якщо під час оновлення індекс відключається, то з'являється повідомлення, в якому міститься ім'я індексу та імена всіх пов'язаних обмежень, так що можна перебудувати їх після закінчення оновлення. Перестроювання індексу і включення всіх обмежень виправить дані, які стали недійсні в процесі оновлення.
Обмеження CHECK може бути відключено, якщо його визначення містить вираз, для якого компонент Database Engine не може більше гарантувати цілісність даних. Увімкнути режим батьківського контролю можна за допомогою інструкції ALTER TABLE CHECK.
За допомогою інструкції ALTER INDEX DISABLE можна в будь-який час вручну відключити індекс.
Відключення індексу вручну може бути корисно в наступних випадках:
Виправлення помилок дискових операцій вводу-виводу (помилка 823 або 824) на контрольному аркуші і подальше перестроювання індексу.
Тимчасове видалення індексу для усунення неполадок.
Перестроювання некластерізованних індексів.
Якщо некластерізованний індекс включений, операція перестроювання вимагає тимчасове місце на диску, достатню для зберігання нового і старого індексу. При відключенні та перешикування некластерізованних індексів в окремій транзакції місце на диску, звільнене при відключенні індексів, може бути використано для подальшого перестроювання або для будь-якої іншої операції. Додаткового місця на диску не потрібно, за винятком тимчасового місця на диску для сортування; зазвичай це 20 відсотків від розміру індексу.
Якщо місце на диску обмежена, можливо, буде корисним відключити некластерізованний індекс перед перестроюванням. Наприклад, є процедура, що зберігається, яка розбудовує все некластерізованний індекси в одній або більше таблицях. Відключення цих індексів в окремій транзакції, відмінною від операції перестроювання, перед перестроюванням значно скорочує тимчасове місце на диску, необхідне для перестроювання.