2010-09-14 3 views
0

У нас есть таблица с двумя некластеризованными индексами. Оба индекса имеют одинаковые три столбца, в том же порядке они отличаются только тем, что они сортируются по убыванию. Разработчик создал хранимую процедуру, которая делает выбор, где он намеревался (но забыл!), Чтобы принудительно использовать индекс, а не выполнять заказ. Когда один пользователь запускает запрос, один индекс последовательно выбирается (по иронии судьбы, правильный, который замаскировал эту ошибку в течение некоторого времени), когда другой пользователь запускает процедуру, возвращается другой индекс. Что будет отличаться между двумя пользователями, выполняющими ту же самую процедуру, которая повлияла бы на выбор индекса?Выбор некластеризованного индекса Sybase

(Примечание: этот код будет переписан, но я пытаюсь прийти к пониманию того, что было сделано здесь для отчета о последующих действиях).

Заранее спасибо

ответ

0

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

Если у вас есть два одинаковых индексов с различными схемами сортировки, есть шанс, что искомый индекс ключа (i) расположен почти n/2 ГДЕ n=index size

Существует также вероятность того, что на основе данных (дублируют данные/последовательные данные) в таблице, sybase не заботится об индексах и, следовательно, не может решить, какой из них использовать.

Оставьте один индекс за раз и посмотрите, что произойдет.

1

Вы не указали, какая у вас Sybase. Я буду считать ASE.

Выбор индекса зависит от нескольких факторов.

Учитывая ваш случай, когда код не изменился, а два пользователя используют один и тот же хранимая процедура, есть две возможности:

  • проверить, что статистические данные в актуальном состоянии. В зависимости от того, как ваш администратор базы данных автоматизировал функцию UPDATE STATISTICS и уровень (либо индексный, либо табличный уровень); один индекс может быть обновлен, а другой может быть устаревшим. В отличие от оптимизатора ASE 12.5.4, оптимизатор ASE 15.x чувствителен к статистике.

  • Каждый пользователь использует другой набор данных, Аргументы поиска, переменные и т. Д., Которые они подают в качестве входных данных для того же хранимого процесса. ASE делает выбор индекса во время выполнения на основе (а) точных входных данных (Аргументы поиска) и (б) полезности индексов. И все это знает информацию о статистике в соответствии с последними UPDATE STATS.

Смежные вопросы