У нас дуже велика база даних із сотнями невикористаних індексів згідно зі статистикою DMV, які накопичуються з моменту останнього перезавантаження сервера в липні. Один з наших Асоціаторів довірених справ висловив такі застережливі заяви, які не мають для мене сенсу:
- Перш ніж ми скинемо індекс, ми повинні переконатися, чи він не застосовує обмеження унікальності, оскільки оптимізатору запитів може знадобитися цей індекс для існування.
- Щоразу, коли створюється індекс, на SQL Server створюється також статистика, пов'язана з цим індексом. Запит може не використовувати індекс, але він може використовувати його статистику. Тож ми можемо зіткнутися з ситуацією, після падіння індексу певна ефективність запиту стає дуже поганою. SQL Server не зберігає статистику використання статистики. Хоча в нашій базі даних увімкнена функція "Автоматична статистика", я не знаю, яким параметрам потрібно відповідати всередині, перш ніж оптимізатор запитів створить відсутні статистичні дані.
Щодо №1, мені здається, що SQL Server насправді робив би пошук по індексу, щоб визначити унікальність до того, як буде зроблено вставку / оновлення, і, отже, індекс не відображатиметься як не використовується.
Щодо №2, чи реально це можливо?
До речі, коли я кажу, що індекс не використовується, я маю на увазі не пошук і сканування.