powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как временно попросить оптимизатор не использовать тот или иной индекс?
8 сообщений из 33, страница 2 из 2
Как временно попросить оптимизатор не использовать тот или иной индекс?
    #39607471
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlanDenton,

Возможно, Вам нужно распилить таблицу для нормализации и вместо неё создать представление или набор представлений.
Изобилие разношерстных индексов как раз говорит о денормализованном хранении данных.
Соответственно, доработать процедуры.

Хорошим кодом, как известно, плохую архитектуру не исправить. Сиквел к этому особенно чувствителен.
...
Рейтинг: 0 / 0
Как временно попросить оптимизатор не использовать тот или иной индекс?
    #39607472
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKMinamoto,

авторКстати, способ таки есть, не добавляя хинты везде, но с понятными ограничениями в виде второй копии этой таблицы:

ещё раз, затраты на материализацию таблицы будут даже больше чем ребилд индекса после DISABLE
Еще раз, я не предлагаю решение, я пытаюсь предложить варианты "на подумать".

Понятно, что накладные расходы не стоят того, скорее всего, особенно с учетом наличия еще доп. индексов, которые тоже необходимо будет продублировать. Да и увеличение затрат на запись никто не отменял.
...
Рейтинг: 0 / 0
Как временно попросить оптимизатор не использовать тот или иной индекс?
    #39607477
AlanDenton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов, база недавно зашла. Формально нужно за неделю две порешать проблемы с размером.
Часть вещей вроде неиспользуемых таблиц / индексов - уже готова. А вот тут затык.
И нельзя симитировать на DEV нагрузку с PROD сервера.
Потому и такие вот попытки найти безболезненный способ.
...
Рейтинг: 0 / 0
Как временно попросить оптимизатор не использовать тот или иной индекс?
    #39607482
AlanDenton,

а если просто изучить статистику использования индекса и по соотношению чтений/записей решить - нужен ли он или можно и без него обойтись? сервер же не от "нечего делать" эту статистику считает....
...
Рейтинг: 0 / 0
Как временно попросить оптимизатор не использовать тот или иной индекс?
    #39607496
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlanDenton,

у меня не получилось найти другого решения, кроме как произвести нормализацию в такой ситуации. Со временем производительность деградирует и количество взаимоблокировок превышает терпение пользователей :)
Но это трудоёмкая задача.
...
Рейтинг: 0 / 0
Как временно попросить оптимизатор не использовать тот или иной индекс?
    #39607543
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlanDenton,

В качестве идеи:
- сделать представление select * from Таблица with (index = 0)
- из dm_exec_query_stats, анализируя планы, определить процедуру и инструкцию в ней
- заменить в найденной процедуре таблицу на представление
...
Рейтинг: 0 / 0
Как временно попросить оптимизатор не использовать тот или иной индекс?
    #39607581
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Непонятен подход.
Если вы хотите это сделать на рабочей базе, то крайне не советую такие эксперименты.
Если не тестовой, то какие проблемы с перфомансом могут быть?
...
Рейтинг: 0 / 0
Как временно попросить оптимизатор не использовать тот или иной индекс?
    #39607698
AlanDenton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SomewhereSomehowБыло бы полезно иметь такую функциональность, но в MSSQL ее нет.

Документированных хинтов, типа ораклового NO_INDEX() в сиквеле нет, как и недокументированных такого плана. Другие недокументированные возможности влияния на оптимизатор, типа флагов трассировки или правил преобразования, влияют на запрос в целом, но не на конкретный объект (индекс/таблица).

Информация о конкретном объекте хранится в метаданных этого объекта в системных таблицах. В тестовых условиях, ради интереса, можно было бы найти конкретные биты и поиграть с метаданными индекса, например, сделав его фильтрованным с таким фильтром из-за которого оптимизатор не сможет его использовать или гипотетическим или еще что-то. Но это ведет к модификации таблиц, т.е. переводу сервера в монопольный режим, что недопустимо в реальности, и главное к возможной и вероятной порче базы данных, что совсем не допустимо.

На мой взгляд, лучше использовать штатные средства и, либо отключать индекс, либо подменять объект.

МС в делает некоторые шаги к централизованному управлению подсказками оптимизатору, может быть эта задача и станет когда-то решаться нормально, но пока таких средств нет.
Тему можно закрывать.
Всем искренне признателен спасибо за помощь.
...
Рейтинг: 0 / 0
8 сообщений из 33, страница 2 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как временно попросить оптимизатор не использовать тот или иной индекс?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]