Есть ли в Sybase операция поиска по индексу (например, SQL Server) в плане выполнения?

Я разработчик SQL Server, который пытается оптимизировать запрос Sybase. Я пытаюсь получить некластерный индекс для поиска, но он продолжает выполнять сканирование, просто хотел подтвердить, возможен ли «поиск» в Sybase, если да, то как добиться поиска по некластерному индексу?

У меня есть запрос, как показано ниже (* на самом деле около 32 столбцов)

SELECT t.* FROM dbo.g1_positions t WHERE t.source_date = (выберите max(source_date) из g1_positions)

У меня есть 3 некластерных индекса (без кластерного индекса) в таблице, как показано ниже.

  1. индекс с именем primary_key в столбцах entity_id, bgnref, retnum, source_date
  2. индекс с именем idx_entdte для столбцов entity_id, source_date
  3. индекс с именем idx_bgndte для столбцов bgnref, source_date

Внутренний запрос (который вычисляет max, выполняет сканирование индекса на idx_entdte), внешний индекс по умолчанию выполняет сканирование таблицы, если я заставляю индекс, он выполняет сканирование индекса и некоторые дополнительные вещи, которые описываются «Использование размера ввода-вывода 2 Кбайт для данных страниц. Со стратегией замены буфера MRU для страниц данных.

Я предполагаю, что это эквивалентно «поиску» в SQL Server. После форсирования индекса я не вижу прироста производительности. Мне просто было интересно, что я могу сделать для повышения производительности.

Я не могу вносить какие-либо изменения в таблицу, такие как создание/удаление/изменение индекса.

Просто чтобы дать представление о поиске в работе SQL Server.

Предположим, у нас есть таблица Employee с 4 записями.

введите здесь описание изображения

Если запрос использует некластерный индекс для Emp_id, он достигнет конечного узла, и для получения фактических данных будет использоваться указатель для чтения фактических данных (строки) в куче. Этот процесс с использованием указателя называется LookUp.


person Pritesh    schedule 17.08.2012    source источник
comment
Что, по вашему мнению, он будет искать? Индексы имеют source_date как второй или четвертый столбец.   -  person ta.speot.is    schedule 17.08.2012
comment
Согласен, без индекса с source_date в качестве первого столбца движок никак не сможет что-либо найти.   -  person Paciv    schedule 17.08.2012
comment
@ta.speot.is можно сделать что-то еще, чтобы повысить производительность запроса.   -  person Pritesh    schedule 17.08.2012
comment
@Paciv какой-нибудь другой трюк для улучшения производительности запросов?   -  person Pritesh    schedule 17.08.2012
comment
Вы можете поместить индекс на source_date   -  person ta.speot.is    schedule 17.08.2012
comment
@ ta.speot.is :) Исходная система не находится под моим контролем.. мы не можем вносить в нее какие-либо изменения.. пожалуйста, немного поправляйтесь на уровне запроса..   -  person Pritesh    schedule 17.08.2012


Ответы (1)


Это возможно!

Если он не использует его, предположительно, это потому, что сканирование таблицы лучше. Это может быть потому, что статистика отключена! Обновите и их.

При необходимости вы можете принудительно использовать индекс, для получения дополнительной информации см. этот пример.

person aF.    schedule 17.08.2012
comment
когда я форсирую индекс, он выполняет сканирование индекса без кластера. Я отредактировал вопрос, чтобы объяснить мой сценарий. - person Pritesh; 17.08.2012
comment
@Pritesh Я парень из Sybase, не могли бы вы объяснить мне, как поиск работает на сервере sql, пожалуйста. - person aF.; 17.08.2012
comment
добавлена ​​​​детализация поиска к вопросу. Пожалуйста, посмотрите. - person Pritesh; 17.08.2012
comment
Некластеризованные (и кластеризованные) индексы делают то, что вы описали на изображении. Вы обновили статистику? - person aF.; 17.08.2012
comment
в самом кластере данные (запись) находятся на листовом узле, по крайней мере, в SQL Server это так! поэтому нет необходимости искать в индексе кластера. Если я обновлю статистику, все равно произойдет сканирование индекса кластера? - person Pritesh; 17.08.2012
comment
Если определенный индекс для столбца (столбцов) не является кластеризованным индексом, он всегда будет сканироваться с этим индексом. И да, кластерный индекс работает как в SQL Server. - person aF.; 28.08.2012