Что происходит на стороне сервера SQL Server, когда я удаляю индекс из одной из моих таблиц?Что происходит, когда некластеризованный индекс удаляется?
Подробности: У меня есть база данных, запущенная в производство.
В этой базе данных у меня есть запрос, который создает взаимоблокировки на регулярной основе. Я нашел запрос, создающий тупик, запустил его на моем компьютере, показывая его план выполнения. SQL Server Management Studio предлагает добавить индекс в одну конкретную таблицу.
Индекс имеет смысл для меня, но моя проблема в том, что на этой таблице у меня уже есть 3 индекса, и, честно говоря, я не могу быть уверен, правильно ли они использованы или созданы они для определенного роль.
Я мог бы просто добавить еще один индекс в таблицу, но меня беспокоит стоимость, которую я буду платить каждый раз, когда я добавляю/обновляю/удаляю данные в таблице.
Я сделал несколько попыток на своей машине, и мне кажется, что мне нужно удалить хотя бы два других индекса, чтобы заставить движок выбрать индекс, который я создаю сегодня (выглядит странно для меня). Как только я заставляю движок взять мой индекс (потому что я удалил все остальное), запрос выполняется в 10 раз быстрее.
Могу ли я просто использовать команду DROP Index
без особых проблем? Мне не нужно перестраивать или что-то еще?
Вы можете сбросить ненужные индексы, но вы также можете добавить подсказку запроса, чтобы [принудительно использовать SQL-сервер для использования определенного индекса] (https://blog.sqlauthority.com/2009/02/08/sql-server-introduction -to-force-index-query-hints-index-hint-part2 /) –
Напоминал меня об этом недавнем [@TrumpDBA] (https://twitter.com/TrumpDBA/status/826154547299151872) твит –