Выбор некластеризованного индекса Sybase - PullRequest
0 голосов
/ 14 сентября 2010

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

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

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

Ответы [ 2 ]

1 голос
/ 13 декабря 2010

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

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

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

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

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

0 голосов
/ 23 сентября 2010

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

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

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

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

...