У нашому проекті працює дуже велика, дуже складна база даних. Отож, близько місяця тому ми помітили, що простір, який використовується індексованими стовпцями, що містять нульові значення, стає надто великим. Як відповідь на це, я написав як скрипт, який динамічно шукатиме всі індекси одного стовпця, що містять більше 1% нульових значень, а потім скидає та відтворює ці індекси у вигляді відфільтрованих індексів за умови, що значення НЕ було NULL. Це знизить і відтворить сотні індексів по всій базі даних і, як правило, звільнить майже 15% місця, що використовується всією БД.
Зараз у мене є два питання з цього приводу:
А) Які недоліки використання фільтрованих індексів таким чином? Я б припускав, що це тільки покращить ефективність роботи, але чи пов'язані якісь ризики щодо ефективності?
B) Ми отримали помилки ( "не може скинути індекс XYZ, оскільки його немає або у вас немає дозволу" ) при відмові та відтворенні індексів, хоча після перевірки все пішло так, як очікувалося. Як це може статися?
Дякуємо за будь-яку допомогу!
Редагувати: У відповідь на @Thomas Kejser
Привіт і спасибі, але виявляється, це було катастрофою. У той час ми не розуміли кількох речей, таких як:
- Під час запиту SQLOS складає індексні плани, перш ніж визначити, що він не може використовувати значення NULL для приєднання стовпців таблиці. IE, вам справді потрібно мати фільтр пункту WHERE, який відповідає індексу для кожного відфільтрованого індексу, який використовується в запиті, або індекс взагалі не буде використовуватися.
- Скасування та створення індексів та надмірне оновлення статистики ще раз після цього все ще може бути недостатньою для створення оновлених планів, які, як ми вважали, вони будуть. Виявляється, що в деяких випадках лише достатньо висока навантаження змусить SQL Server переосмислити плани.
- Існує деяка екзотика щодо функціональності планувальника виконання, який важко визначити лише здоровим глуздом та логікою. Із тисячами варіантів різних запитів, що формуються за кодом, навіть, здавалося б, марні покажчики можуть допомогти в деяких статистичних та планових запитах, які в кінцевому підсумку використовуються в критичних запитах.
Зрештою, ці зміни були відмінені. Тож відфільтровані індекси є потужним інструментом, але вам потрібно по-справжньому зрозуміти, які саме дані отримуються з цих стовпців. Якщо звичайні індекси, окрім космічних питань, досить легко застосувати, відфільтровані індекси представляють дуже індивідуальні рішення. Вони, звичайно, не є заміною звичайного індексу, а розширення до них у тих особливих обставинах, які вони вимагають.