Я разработчик SQL Server, который пытается оптимизировать запрос Sybase. Я пытаюсь получить некластерный индекс для поиска, но он продолжает выполнять сканирование, просто хотел подтвердить, возможен ли «поиск» в Sybase, если да, то как добиться поиска по некластерному индексу?
У меня есть запрос, как показано ниже (* на самом деле около 32 столбцов)
SELECT t.* FROM dbo.g1_positions t WHERE t.source_date = (выберите max(source_date) из g1_positions)
У меня есть 3 некластерных индекса (без кластерного индекса) в таблице, как показано ниже.
- индекс с именем primary_key в столбцах entity_id, bgnref, retnum, source_date
- индекс с именем idx_entdte для столбцов entity_id, source_date
- индекс с именем idx_bgndte для столбцов bgnref, source_date
Внутренний запрос (который вычисляет max, выполняет сканирование индекса на idx_entdte), внешний индекс по умолчанию выполняет сканирование таблицы, если я заставляю индекс, он выполняет сканирование индекса и некоторые дополнительные вещи, которые описываются «Использование размера ввода-вывода 2 Кбайт для данных страниц. Со стратегией замены буфера MRU для страниц данных.
Я предполагаю, что это эквивалентно «поиску» в SQL Server. После форсирования индекса я не вижу прироста производительности. Мне просто было интересно, что я могу сделать для повышения производительности.
Я не могу вносить какие-либо изменения в таблицу, такие как создание/удаление/изменение индекса.
Просто чтобы дать представление о поиске в работе SQL Server.
Предположим, у нас есть таблица Employee с 4 записями.
Если запрос использует некластерный индекс для Emp_id, он достигнет конечного узла, и для получения фактических данных будет использоваться указатель для чтения фактических данных (строки) в куче. Этот процесс с использованием указателя называется LookUp.
source_date
в качестве первого столбца движок никак не сможет что-либо найти. - person Paciv   schedule 17.08.2012