powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Positioning by key или Positioning at index start
4 сообщений из 4, страница 1 из 1
Positioning by key или Positioning at index start
    #37848103
JenyaD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ASE 15.0.2
В чем отличие сообщений :
Positioning by key и
Positioning at index start
Какое сканирование более выгодно с точки зрения производительности ?

Сканирую 2 таблицы с одинаковыми уникальными индексами, объединяя их по полям индексов.
Та которая стоит первой будет сканироваться Positioning by key нижняя Positioning at index start.
Если поменять местами то будет наоборот.
...
Рейтинг: 0 / 0
Positioning by key или Positioning at index start
    #37848488
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JenyaD,

Positioning by key - это позиционирование по дереву индекса. Более выгодное.

Positioning at index start - это сканирование всего индекса (что-то между table scan и Positioning by key)

По остальным вопросам можно ответить только после увиденного запроса!
...
Рейтинг: 0 / 0
Positioning by key или Positioning at index start
    #37848720
JenyaD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тестовый пример :
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
create table #DIC( 
     DEP_ID               integer                    not null, 
     DIC_ID               numeric(8)                 not null,
     constraint pk_DIC primary key (DEP_ID, DIC_ID) 
     ) 
     
     
  create table #EMP( 
     DEP_ID               integer                    not null, 
     DIC_ID               numeric(8)                 not null,
     constraint pk_EMP primary key (DEP_ID, DIC_ID) 
     )

 insert into #DIC(DEP_ID, DIC_ID)
     values (1, 1)
     
     insert into #DIC(DEP_ID, DIC_ID)
     values (1, 2)
     
     insert into #EMP(DEP_ID, DIC_ID)
     values (1, 1)
     
     insert into #EMP(DEP_ID, DIC_ID)
     values (1, 3)

  select * 
     from #DIC,
          #EMP
     where #DIC.DEP_ID = #EMP.DEP_ID and
           #DIC.DIC_ID = #EMP.DIC_ID 
           
     select * 
     from #EMP,
          #DIC
     where #DIC.DEP_ID = #EMP.DEP_ID and
           #DIC.DIC_ID = #EMP.DIC_ID 
 



То что я выше описал наблюдалось, когда таблицы были пустыми.
После заполнения - в обоих случаях Positioning at index start
...
Рейтинг: 0 / 0
Positioning by key или Positioning at index start
    #37849651
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JenyaD,
При таких запросах ничего криминального нет!!!

Первая таблица сканируется полностью, так как нет условия (в where только соединение таблиц).
Так как вы запрашиваете только поля, которые входят в индекс, происходит сканирование индекса(Positioning at index start) а не table scan. Вторая таблица уже по всем законам nested loop join присоединяется к первой.

P/S: По-хорошему для такого запроса оптимальным выбрать стратегию merge join. Но это тоже надо проверять.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Positioning by key или Positioning at index start
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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