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

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

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

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

По остальным вопросам можно ответить только после увиденного запроса!
...
Рейтинг: 0 / 0
21.06.2012, 15:52
    #37848720
JenyaD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Positioning by key или Positioning at index start
Тестовый пример :
Код: 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
22.06.2012, 09:05
    #37849651
cherrex_Den
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Positioning by key или Positioning at index start
JenyaD,
При таких запросах ничего криминального нет!!!

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

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


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