Я никогда не слышал о сильно фрагментированных индексах. Я не думаю, что оптимизатор SQL-сервера смотрит на фрагментацию, чтобы не использовать индекс.
Чтобы определить, используется ли индекс, SQL-сервер использует статистику. Если вы считаете, что индекс можно использовать, но он не используется сервером, ваша статистика может быть неверной.
Если вы хотите узнать больше о статистике: http://blog.idera.com/sql-server/understanding-sql-server-statistics/ Дополнительная информация о фрагментации индекса и о том, что с этим можно сделать: http://www.brentozar.com/archive/2012/08/sql-server-index-fragmentation/
Изменить: я прочитал статью, и в ней говорится «вероятно, игнорировать». При игнорировании будет, по-моему, опять же исходя из статистики.
Пример: если статистика показывает, что только одна строка (из тысяч) имеет искомое значение, я думаю, что она будет использовать индекс, независимо от того, насколько он фрагментирован. Вместо всей таблицы нужно будет прочитать всего 3 страницы. Если статистика показывает, что 50% значений находятся в поиске, то используется сканирование таблицы. Используется ли сканирование индекса или таблицы, определяется статистикой. Высокая фрагментация повлияет на скорость (частичного) сканирования индекса и, таким образом, приведет к тому, что оптимизатор выберет сканирование таблицы раньше, чем с нефрагментированным индексом. Так что, хотя это параметр, который влияет на качество вашего индекса, я не думаю, что индекс не существует только потому, что он сильно фрагментирован.
Тем не менее, не позволяйте вашим индексам фрагментироваться :). Microsoft предлагает реорганизовать любой индекс с фрагментацией > 5 % и перестроить индекс с фрагментацией > 30 %. (http://support.microsoft.com/kb/2755960) Но это также зависит от того, как в этой таблице делается много вставок.
person
Pieter
schedule
05.02.2014