Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE 12.5.x.x использование нескольких индексов ? / 10 сообщений из 10, страница 1 из 1
06.09.2004, 11:45
    #32681096
_solo_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5.x.x использование нескольких индексов ?
вопрос -
умеет ли Sybase использовать несколько индексов по одно таблице ?
( в документации чтото об этом ничего не нашел)
...
Рейтинг: 0 / 0
06.09.2004, 11:54
    #32681127
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5.x.x использование нескольких индексов ?
Не очень понятно, что такое "использовать" - можно это трактовать по-раному, но скажем так - может.
Есть разные стратегии исполнения запросов, которые ASE может применять, и, в частности, в некоторых из них ASE может использовать для выполнения одного запроса несколько индексов по одной таблице.

Если вы приведете запрос, то я смогу более конкретно сказать, может ли или будет ли использоваться несколько индексов.
...
Рейтинг: 0 / 0
10.09.2004, 19:25
    #32690414
_solo_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5.x.x использование нескольких индексов ?
я некоректно сформулировал вопрос -- постараюсь изложить правильнее.

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

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

я строю индекс по каждому из полей. Может ли ASE отобрать строки используяю один индекс, потмоу строки использую другой индекс, сделать пересечение результатов и выдать мне выборку.

в плане запроса сай пишет что исползует только один индекс. В хинтах я такого не нашел . (к примеру в оракле есть четкий хинт merged_index - пересечение/ обединение результата выборки по нескольким индексам)

Код: plaintext
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.
create table EMP (
     EMP_ClockNo          int                            not null,
     EMP_ProfessionRFR    SH_RFR                         not null,
....
     EMP_EducRFR          SH_RFR                         not null,
)
go

create index OU_EMP_FK1 on EMP (
EMP_ProfessionRFR ASC
)
go

create index OU_EMP_FK2 on EMP (
EMP_EducRFR ASC
)
go

select EMP_ProfessionRFR, EMP_EducRFR  from EMP where 
 EMP_ProfessionRFR =  1  
AND 
 EMP_EducRFR =  2 

..........
FROM TABLE 
            EMP 
        Nested iteration. 
        Index : OU_EMP_FK1 
        Forward scan. 
        Positioning by key. 
        Keys are: 
            EMP_ProfessionRFR  ASC 
        Using I/O Size  2  Kbytes for index leaf pages. 
        With LRU Buffer Replacement Strategy for index leaf pages. 
        Using I/O Size  2  Kbytes for data pages. 
        With LRU Buffer Replacement Strategy for data pages
про использование второго индекса упоминаний нету и в доках про такую возможность я не нашел.

а в оракле можно указать использовать персечение/объединение индексов

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select /*+INDEX_JOIN (EMP OU_EMP_FK1 OU_EMP_FK2 )*/  
EMP_ProfessionRFR, EMP_EducRFR  from EMP where 
 EMP_ProfessionRFR =  1  
AND 
 EMP_EducRFR =  2 


SELECT STATEMENT, GOAL = ALL_ROWS			 4 	 8 	 64 
 VIEW	OPERU	          index$_join$_001	 4 	 8 	 64 
  HASH JOIN				 8 	 64 
   INDEX RANGE SCAN	OPERU	OU_EMP_FK1	 7 	 8 	 64 
   INDEX RANGE SCAN	OPERU	OU_EMP_FK2	 7 	 8 	 64 
...
Рейтинг: 0 / 0
10.09.2004, 21:34
    #32690474
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5.x.x использование нескольких индексов ?
Нет, в ASE у оптимизатора нет такой стратегии выполнения запроса. По крайней мере в версиях до 12.5.0 (Сейчас много нового в последних релизах).

Эта стратегия выполнения запроса достаточно странна для меня, как-то она не очень понятна.
Если по обоим значениям записей немного, то легче читать по одному индексу и потом сразу данные - будет меньше IO.
Даже что-то и не соображу, когда такое будет выгодно.
...
Рейтинг: 0 / 0
11.09.2004, 01:43
    #32690539
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5.x.x использование нескольких индексов ?
Не знаю, как в Оракле, а в MSSQL оптимизатор тоже умеет тащить данные с таблицы, пользуясь множеством индексов. Это не так затратно делать, так как в нем поддерживаются покрывающие индексы, то есть если поля запроса полностью присутствуют в индексах, то оптимизатор работает только с индексами, вообще не обращаясь к таблице. Это как всегда палка о 2-х концах - с одной стороны оптимизатор может самостоятельно разруливать запросы с сложными соединениями таблиц более эффективно, так как он может выбирать не с одного, а нескольких индексов, плюс требований к квалификации специалиста меньше - пойди узнай, какие правильные индексы нужно на таблицы сделать, особенно если они должны быть составными. А тут сделал на каждое поле индекс и спишь спокойно. С другой стороны все эти многоиндексные покрывающие перетурбации очень нехорошо влияют на работу блокировок в MSSQL, скорость обновления (вполне возможно что можно было бы обойтись составным индексом на большую таблицу, а разработчик понаделал кучу индексов и радуется, что оптимизатор сам выбирать будет) и я даже подозреваю скорее всего как раз могут быть частой причиной деадлоков в MSSQL (кто то пишет информацию и блокирует строки в таблице, в это время кто то читает и оптимизатор блокировал те же строки на индексах). Ну а на Оракле может быть и прокатывает такая политика, раз уж он версионник и озабочен не блокировками, а своими сборками мусора.
...
Рейтинг: 0 / 0
11.09.2004, 22:48
    #32690774
_solo_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5.x.x использование нескольких индексов ?
MasterZivНет, в ASE у оптимизатора нет такой стратегии выполнения запроса. По крайней мере в версиях до 12.5.0 (Сейчас много нового в последних релизах).

Эта стратегия выполнения запроса достаточно странна для меня, как-то она не очень понятна.
Если по обоим значениям записей немного, то легче читать по одному индексу и потом сразу данные - будет меньше IO.
Даже что-то и не соображу, когда такое будет выгодно.

даже если записей немного но каждая запись разбросана так что по одной записи на страницу? Ведь не одна запись читаеться а целиком страница данных.
+ иногда оно таки надо, и лучше чтоб такая возможность была.
...
Рейтинг: 0 / 0
13.09.2004, 11:22
    #32691393
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5.x.x использование нескольких индексов ?
Какая разница, как они там разбросаны ? А встречный вопрос - а если разбросаны по разным страницам и записи второго индекса ? В общем, я лично не очень понимаю, зачем это нужно и не готов обсуждать полезность этого метода доступа. Я сильно подозреваю, что это может быть полезно для обработки тяжелых, трудно оптимизируемых запросов типа OLAP-ных. Но я всегда считал и продолжаю считать, что лучше написать хороший запрос, чем оптимизировать плохой.

Вот например есть в ASE парралельное выполнение запросов. Так вот, применяется она исключительно в случаях, когда запрос настолько плох, что будет молотить все записи. Конечно, такая возможность нужна в сервере, потому что такие запросы иногда нужно выполнять (например, при том же построении индексов). Но если тебе в нормальном запросе (который ты считаешь хорошо выполнимым) предлагают парралельную обработку, то это значит, что что-то не так в запросе и надо что-то делать на уровне текста запроса или на уровне базы (например нет под запрос индекса еще, т.е. ты забыл его создать).

Это как пример технологий обработки данных, которые должны быть, но которые использовать в нормальной жизни не нужно. Я подозреваю, что что-то подобное происходит и с поиском по двум индексам, хотя возможно я и не прав.
...
Рейтинг: 0 / 0
15.09.2004, 12:46
    #32695486
_solo_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5.x.x использование нескольких индексов ?
искуственная ситуация но -
нет возможности под все пару ограничений создать индекс в который будут входить все столбцы на которые накладываються ограничения.

при этом выборка по по каждому из ограничений возвращает большое множество данных. но пересечение этих множества на 1-2 порядка меньшее количество записей. в этом случае выборка по двум индексам лучше чем выборка по одному индексу а по второму ограничению делать дальнейший фул тейбл скан.
...
Рейтинг: 0 / 0
15.09.2004, 13:07
    #32695554
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5.x.x использование нескольких индексов ?
2_solo_:
Это к чему это ты ? Я ничего не понял.
...
Рейтинг: 0 / 0
07.10.2004, 20:38
    #32728905
_solo_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5.x.x использование нескольких индексов ?
автор общем, я лично не очень понимаю, зачем это нужно и не готов обсуждать полезность этого метода доступа

это была попытка ответить на эту фразу.
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE 12.5.x.x использование нескольких индексов ? / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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