Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE 12.53 Составной Index в большой таблице не используется / 25 сообщений из 31, страница 1 из 2
27.07.2005, 10:19
    #33186236
Izumov Alex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.53 Составной Index в большой таблице не используется
Для начала скажу на ASA v7.0.4.3538 это все работало быстро, тормоз не замечалось, а после переезда на Adaptive Server Enterprise/12.5.3/EBF 12462 ESD#2/ все буквально остановилось. Запрос работает ооооочень долго, потому что Table scan по 15 млн записей.
Это нюансы оптимизатора, или глюки этой версии АСЕ?
Опишу ситуацию подробно: есть большие таблицы ( 15 млн ) Entry, Acccount ( 750 тыс ), Subscriber ( 350 тыс )

Есть индексы
Entry Index:
CREATE NONCLUSTERED INDEX XIF463Entry
ON dbo.Entry(AccountID,EntryDate)
Account, Subscriber -> Clustered по ID

1. Певичный запрос
select * from Entry e, Account a, Subscriber s
where e.AccountID = a.ID and a.SubscriberID = s.ID
and e.EntryDate between '2005.01.01' and '2005.02.01'

Так вот, при таком запросе по таблице получаем:
QUERY PLAN FOR STATEMENT 1 (at line 1).
STEP 1
The type of query is SELECT.
FROM TABLE Entry e
Nested iteration.
Table Scan. Forward scan. Positioning at start of table.
FROM TABLE Account a
Nested iteration.
Using Clustered Index.
Index : Account_4236695262
Forward scan. Positioning by key.
Keys are: ID ASC
FROM TABLE Subscriber s
Nested iteration.
Using Clustered Index.
Index : Subscriber_17321981902
Forward scan. Positioning by key.
Keys are: ID ASC
И это работает безумно медленно, понятно почему.
Такой же план запроса получаем и при след. запросе ( убрали дату )
select * from Entry e, Account a, Subscriber s
where e.AccountID = a.ID and a.SubscriberID = s.ID
2. Если добавить точное значение
select * from Entry e, Account a, Subscriber s
where e.AccountID = a.ID and a.SubscriberID = s.ID
and e.EntryDate between '2005.01.01' and '2005.02.01'
and e.AccountID = 1234
QUERY PLAN FOR STATEMENT 1 (at line 1).
STEP 1
The type of query is SELECT.
FROM TABLE Account a
Nested iteration.Using Clustered Index.
Index : Account_4236695262
Forward scan. Positioning by key.
Keys are: ID ASC
FROM TABLE Subscriber s
Nested iteration. Using Clustered Index.
Index : Subscriber_17321981902
Forward scan. Positioning by key.
Keys are: ID ASC
FROM TABLE Entry e
Nested iteration.
Index : XIF463Entry
Forward scan. Positioning by key.
Keys are: AccountID ASC EntryDate ASC
Видим, что в таком случае оптимизатор подхавтил идекс в Entry, причем по обоим ключам, собственно, чего мы и хотели добиться.
Но в нашем первичном запросе у нас нет возможности указать прямо конкретное значение, что и понятно.
3. Делаем подсказки
select *
from Entry e ( index XIF463Entry ) , Account a, Subscriber s
where e.AccountID = a.ID and a.SubscriberID = s.ID
and e.EntryDate between '2005.01.01' and '2005.02.01'
QUERY PLAN FOR STATEMENT 1 (at line 1).
STEP 1
The type of query is SELECT.
FROM TABLE Entry e
Nested iteration.
Index : XIF463Entry
Forward scan. Positioning at index start.
FROM TABLE Account a
Nested iteration. Using Clustered Index.
Index : Account_4236695262
Forward scan. Positioning by key.
Keys are: ID ASC
FROM TABLE Subscriber s
Nested iteration. Using Clustered Index.
Index : Subscriber_17321981902
Forward scan. Positioning by key.
Keys are: ID ASC
Видим что при указании хинте индекса он берется, но ключи не подставляются, то есть получается все равно Table Scan почти что, только по индексу, что также не решает проблемы.
Направьте плз на путь истинный!!! Как обойти оптимизатор, чтобы он нормально брал индекс, и избежать Table Scan по самой большой табле?
Спасибо!
...
Рейтинг: 0 / 0
27.07.2005, 12:13
    #33186612
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.53 Составной Index в большой таблице не используется
У тебя нет вообще индекса по

e.EntryDate between '2005.01.01' and '2005.02.01'

Ну так что ж ты хочешь ?

Чтобы
and e.EntryDate between '2005.01.01' and '2005.02.01'
было действующим SARG-ом по индексу, надо чтобы в каком-то
из индексов поле EntryDate было бы ПЕРВЫМ полем в индексе.
...
Рейтинг: 0 / 0
27.07.2005, 12:40
    #33186696
Izumov Alex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.53 Составной Index в большой таблице не используется
Может я не всего понимаю конечно, но ведь в индексе по Entry поле AccountID - первое, так почему же тогда при связке по этому полю индекс не подхватывается? Или индекс берется, только когда это поле стоит в условии напрямую, те AccountID = 1234? Те при его участии в джойне индекс что ли не берется?
Как то странно это...
...
Рейтинг: 0 / 0
28.07.2005, 16:22
    #33189899
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.53 Составной Index в большой таблице не используется
Izumov AlexКак то странно это...
Ничего странного. В ASE стоимостной оптимизатор и он реально считает, выгодно ли использовать индекс или нет. Если какой-то случай совсем непонятный - могу его объяснить.
...
Рейтинг: 0 / 0
28.07.2005, 16:26
    #33189917
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.53 Составной Index в большой таблице не используется
Izumov Alexв индексе по Entry поле AccountID - первое, так почему же тогда при связке по этому полю индекс не подхватывается?
Конкретно здесь оптимизатор уже выбрал стратегию TableScan для таблицы, так что он уже по этой таблице индекс использовать не будет - он по ней бежит и из нее делает join-ы на другие таблицы.
...
Рейтинг: 0 / 0
28.07.2005, 18:40
    #33190307
Izumov Alex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.53 Составной Index в большой таблице не используется
А кто бы мне объяснил с каких пор для оптимизатора Table Scan лучше поиска по индексу, причем по 2м полям? Тем более с условием?
...
Рейтинг: 0 / 0
28.07.2005, 19:28
    #33190357
Izumov Alex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.53 Составной Index в большой таблице не используется
Для начала скажу, что проблему с предыдущим запросом мы таки решили, добавив принудительно ХИНТ по индексу:
запрос:
select *
from Subscriber as s (index XAK2Subscriber),
Account as a, Entry as e
where a.SubscriberID = s.ID
and e.AccountID = a.ID
and e.entryDate between '2005.06.01' and '2005.06.10'
DDL XAK2Subscriber:
CREATE NONCLUSTERED INDEX XAK2Subscriber
ON dbo.Subscriber(tmpCardID)
Query Plan:
QUERY PLAN FOR STATEMENT 4 (at line 87).
STEP 1 The type of query is SELECT.
FROM TABLE Subscriber s
Nested iteration.
Index : XAK2Subscriber
Forward scan.
Positioning at index start.
FROM TABLE Account a
Nested iteration.
Index : XIE2Account
Forward scan.
Positioning by key.
Keys are:
SubscriberID ASC
FROM TABLE Entry e
Nested iteration.
Index : XIF463Entry
Forward scan.
Positioning by key.
Keys are:
AccountID ASC
EntryDate ASC

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

А теперь еще пара ситуаций, кт мы так и не смогли понять. Выбор оптимизатора остается полной загадкой!!!
К предыдущему запросу было добавлено условие из рабочего селекта, и встала новая проблема - ОПЯТЬ TABLE SCAN ( рассматриваемый запрос является частью основного, кт реально должен крутиться на базе, но остальные таблицы и условия не влияют на основную проблему, это проверено )
1.
запрос:
select *
from Subscriber as s (index XAK2Subscriber) ,
Account as a, Entry as e
where a.SubscriberID = s.ID
and e.AccountID = a.ID
and e.entryDate between '2005.06.01' and '2005.06.10'
and e.entryType = 10
Query plan:
QUERY PLAN FOR STATEMENT 1 (at line 1).
STEP 1
The type of query is INSERT.
The update mode is direct.
Worktable1 created for REFORMATTING.
FROM TABLE Entry e
Nested iteration.
Table Scan.
Forward scan.
Positioning at start of table.
Using I/O Size 4 Kbytes for data pages.
With MRU Buffer Replacement Strategy for data pages.
TO TABLE
Worktable1.
STEP 2
The type of query is SELECT.
FROM TABLE
Subscriber
s
Nested iteration.
Index : XAK2Subscriber
Forward scan.
Positioning at index start.
FROM TABLE
Account
a
Nested iteration.
Index : XIE2Account
Forward scan.
Positioning by key.
Keys are:
SubscriberID ASC
FROM TABLE
Worktable1.
Nested iteration.
Using Clustered Index.
Forward scan.
Positioning by key.
2. А теперь что мы сделали, чтобы обойти ЭТОТ непонятный оптимизатор!!!
Запрос:
select *
from Subscriber as s (index XAK2Subscriber) ,
Account as a, Entry as e
where a.SubscriberID = s.ID
and e.AccountID = a.ID
and e.entryDate between '2005.06.01' and '2005.06.10'
and Isnull(e.entryType,0 ) = 10
или можно аналогично
select *
from Subscriber as s (index XAK2Subscriber) ,
Account as a, Entry as e
where a.SubscriberID = s.ID
and e.AccountID = a.ID
and e.entryDate between '2005.06.01' and '2005.06.10'
and e.entryType not in ( 1, 2, 3 )
Query Plan:
QUERY PLAN FOR STATEMENT 1 (at line 1).
STEP 1
The type of query is SELECT.
FROM TABLE Subscriber s
Nested iteration.
Index : XAK2Subscriber
Forward scan.
Positioning at index start.
FROM TABLE Account a
Nested iteration.
Index : XIE2Account
Forward scan.
Positioning by key.
Keys are:
SubscriberID ASC
FROM TABLE Entry e
Nested iteration.
Index : XIF463Entry
Forward scan.
Positioning by key.
Keys are:
AccountID ASC
EntryDate ASC
А теперь как это все объяснить?
Во всех учебниках написано:
Почти Цитата: " В целях оптимизации запроса избегайте использования отрицаний (not, "!=" ), а также применения функций"
...
Рейтинг: 0 / 0
29.07.2005, 00:08
    #33190506
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.53 Составной Index в большой таблице не используется
Izumov AlexА кто бы мне объяснил с каких пор для оптимизатора Table Scan лучше поиска по индексу, причем по 2м полям? Тем более с условием?

Еще раз - у тебя тут вообще нет индекса, подходящего для твоего запроса . Что ж ему еще делать-то ? Только Table scan и остается.
...
Рейтинг: 0 / 0
29.07.2005, 00:20
    #33190511
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.53 Составной Index в большой таблице не используется
Izumov AlexДля начала скажу, что проблему с предыдущим запросом мы таки решили, добавив принудительно ХИНТ по индексу:

and e.entryDate between '2005.06.01' and '2005.06.10'


Не понятно, чего вы там добились, как был плохой план, так и остался.
Вместо table scan раньше - index scan теперь. Чем лучше ? Не понятно. Даже хуже, потому что index scan стоит по IO больше.
Вам надо по entryDate индекс сделать, это - единственный SARG в этом запросе.
...
Рейтинг: 0 / 0
29.07.2005, 00:28
    #33190515
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.53 Составной Index в большой таблице не используется
Напиши пожалуйста результаты выполнения этих запросов :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select count(*) from Entry as e 

select count(*) from Entry as e 
where e.entryDate between '2005.06.01' and '2005.06.10'

select count(*) from Entry as e 
where e.entryType =  10 

select count(*) from Entry as e 
where e.entryDate between '2005.06.01' and '2005.06.10'
and e.entryType =  10 

И еще раз - не пытайся понять оптимизатор таким образом. Ты пытаешься его заставить выбирать между плохим и очень плохим планом запроса, да еще и не понимаешь, что TableScan- это не всегда плохо, и заставляещь читать еще и индекс зачем-то. Ну заставишь - толку -то ?
...
Рейтинг: 0 / 0
29.07.2005, 09:14
    #33190682
Izumov Alex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.53 Составной Index в большой таблице не используется
MasterZiv
Не понятно, чего вы там добились, как был плохой план, так и остался.
Вместо table scan раньше - index scan теперь. Чем лучше ? Не понятно. Даже хуже, потому что index scan стоит по IO больше.
Вам надо по entryDate индекс сделать, это - единственный SARG в этом запросе.
Почему ничего не изменилось?
У нас TAbleScan по самой Маленькой ( 300к записей ) таблице Subscriber as s (index XAK2Subscriber) вместо Entry ( 15 млн записей ) Вот в чем разница!
А по самой большой Entry как раз взялся индекс по 2м ключам, причем по тому самому индексу составному. И почему Вы говорите, что там нету подходящего индекса, если запрос по сути тотже ( только Хинт принудительный по другой табле ), а Индекс он сам подхватил, потому что и ACcountId и entryDate фигурируют в условии и всвязках! Получается, что раз мы его ЗАСТАВИЛИ взять именно такой индекс, то он его бы и сам мог Догадаться взять.
...
Рейтинг: 0 / 0
29.07.2005, 09:31
    #33190721
Izumov Alex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.53 Составной Index в большой таблице не используется
MasterZivНапиши пожалуйста результаты выполнения этих запросов :

Код: plaintext
1.
select count(*) from Entry as e 
15385076
Код: plaintext
1.
2.
select count(*) from Entry as e 
where e.entryDate between '2005.06.01' and '2005.06.10'
180593
Код: plaintext
1.
2.
select count(*) from Entry as e 
where e.entryType =  10 
15009070
Код: plaintext
1.
2.
3.
select count(*) from Entry as e 
where e.entryDate between '2005.06.01' and '2005.06.10'
and e.entryType =  10 
176336

MasterZiv
И еще раз - не пытайся понять оптимизатор таким образом. Ты пытаешься его заставить выбирать между плохим и очень плохим планом запроса, да еще и не понимаешь, что TableScan- это не всегда плохо, и заставляещь читать еще и индекс зачем-то. Ну заставишь - толку -то ?

Повторюсь наверное, но скажу, что Table Scan по 15 млн не может быть лучше чем даже Index Scan с условием по дате, кт значительно ограничивает выборку. Я в курсе, что Table Scan это не всегда плохо, но не по 15 млн жеж, и индекс скан не всегда хорошо, это вроде тоже понятно... но в нашем варианте это не тот случай, когда Table Scan или Index Scan могут быть лучше выборки по индексу.
И еще в ASA все теже запросы, даже безо всяких изменений работают на ура быстро. А на ASE вот такие непонятки, у них различаются принципы выбора оптимизатора? или в чем разница?
...
Рейтинг: 0 / 0
01.08.2005, 09:04
    #33193494
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.53 Составной Index в большой таблице не используется
Как раз чем больше таблица, тем выгоднее может быть table scan вместо бесполезного index forward scan - больше разница в IO.

Izumov Alex
И еще в ASA все теже запросы, даже безо всяких изменений работают на ура быстро. А на ASE вот такие непонятки, у них различаются принципы выбора оптимизатора? или в чем разница?

Оптимизаторы разные, разные сервера. Я полагаю (хотя не знаю ASA вообще) что в ASA более простой, "тупой" что ли оптимизатор, хотя он тоже cost-based.
Не знаю, есть ли там возможность паралельной обработки запросов.
...
Рейтинг: 0 / 0
01.08.2005, 09:12
    #33193506
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.53 Составной Index в большой таблице не используется
Izumov Alex

Повторюсь наверное, но скажу, что Table Scan по 15 млн не может быть лучше чем даже Index Scan с условием по дате, кт значительно ограничивает выборку.

Если ты хочешь заставить оптимизатор сканировать сначала маленькую таблицу, а потом большую, то для этого лучше использовать set forceplan on, а не прописывание индексов. forceplan для этого напрямую предназначен, а указывая индексы ты очень долго будешь это "объяснять" оптимизатору.
Ну или можно еще использовать абстрактные планы.
...
Рейтинг: 0 / 0
01.08.2005, 09:26
    #33193519
Crip
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.53 Составной Index в большой таблице не используется
А статистики давно обновляли раз хинт помогает?
...
Рейтинг: 0 / 0
01.08.2005, 09:31
    #33193525
Izumov Alex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.53 Составной Index в большой таблице не используется
Извините за пустой пост, случайно запостился.

MasterZiv, абстрактные планы нам уже предлагали. но без ста грамм там не разберешься, а у Вас есть опыт работы с ними?

А все-таки Вы бы могли прокомментировать мой пост от 28 июл 05, 19:28, когда после применения оператора отрицания и функции оптимизатор стал сам подхватывать индексы?
...
Рейтинг: 0 / 0
01.08.2005, 09:32
    #33193527
Izumov Alex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.53 Составной Index в большой таблице не используется
CripА статистики давно обновляли раз хинт помогает?
СТатистики обновляли кучу раз.. Тем более ХИНТ по сути не помогает ( см. там идет Forward Scan по индексу, это не лучше чем Table Scan, даже местами хуже)
...
Рейтинг: 0 / 0
01.08.2005, 09:50
    #33193570
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.53 Составной Index в большой таблице не используется
Код: plaintext
1.
select count(*) from Entry as e 
15385076

Код: plaintext
1.
2.
select count(*) from Entry as e 
where e.entryDate between '2005.06.01' and '2005.06.10'
180593

Записи с entryDate between '2005.06.01' and '2005.06.10' составляют порядка 1 процента от всех записей. Значит селективность по дате будет хорошей и для этого запроса индекс по entryDate был бы полезен. Вывод - хотите, чтобы этот запрос работал, создавайте индекс.
Можно добавить в этот индекс еще и поле entryType, но вторым полем, а не первым, при условии, что ваши запросы его часто указывают в параметрах.

Также еще рекомендую почитать эту статью
FAQ .
...
Рейтинг: 0 / 0
01.08.2005, 10:23
    #33193677
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.53 Составной Index в большой таблице не используется
Izumov Alex
MasterZiv, абстрактные планы нам уже предлагали. но без ста грамм там не разберешься,

Да, это верно. Еще и не все работает, есть странные баги/багофичи.

Izumov Alex
а у Вас есть опыт работы с ними?

Да

Izumov Alex
А все-таки Вы бы могли прокомментировать мой пост от 28 июл 05, 19:28, когда после применения оператора отрицания и функции оптимизатор стал сам подхватывать индексы?


Я чесно говоря не хочу тратить на это время, потому что это бессмысленно.
Вы, еще раз, пытаетесь понять, как "не работает" оптимизатор, потому что оптимизировать ему здесь просто нечего. У вас один SARG в запросе, индекса на него нет, поэтому оптимальным будет table scan самой большой таблицы.

А то, о чем вы говорили - ну, там у вас был SARG по этому entryType, оптимизатор решил делать reformating (построение временного индекса в tempdb), почему - не знаю, мне лень разбираться, потому что это заведомо неправильно - строить временный индекс на таблицу на 15 мегастрок. Вы модифицировали запрос (поменяли условие) и оптимизатор пошел по другой ветке, не стал делать reformating. Что при изменении запроса меняется его правила оптимизации- наверное вы понимаете, а вот что не понимаете, что запрос стал ничуть не лучше в результате ваших действий. То, что в этом варианте будет index positioning по Entry запрос делает только хуже - записи отсеиваются только на последней фазе, выборке из Entry, поскольку как я полагаю Account и Subscriber - это справочники, и наверное там есть все записи, на которые ссылается Entry. В итоге у вас запрос перелопачивает все Subscriber-ы, потом все их Account-ы, строя декартово произведение всех допустимых пар Subscriber--его Account, а потом начинает обрабатывать все эти сочетания и по каждому лазить (да - по индексу, здесь ему облегчение) в Entry и проверять - а та ли там дата ? а тот ли entryType ? Так вот, в 99 процентах (по высланной вами статистике) он будет не да дата и не тот тип.
Сервер будет молотить впустую 99% , 1% - с пользой. Это не оптимальный план, ей-богу. А вот оптимизатор предлагал вам действительно оптимальный - table scan по Entity, отбор сразу этого 1%, потом подстановка справочников для уже 180тыс. записей, а не для 15 миллионов.
...
Рейтинг: 0 / 0
01.08.2005, 10:26
    #33193686
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.53 Составной Index в большой таблице не используется
Izumov Alex CripА статистики давно обновляли раз хинт помогает?
СТатистики обновляли кучу раз.. Тем более ХИНТ по сути не помогает ( см. там идет Forward Scan по индексу, это не лучше чем Table Scan, даже местами хуже)

Глупый хинт не может помогать, он только хуже сделает.

И статистика тут ни при чем, потому что у них индекса нету на дату.
Не по чему статистику смотреть. А то, что в одной таблице 15 млн строк а в других - поменьше немного, судя по планам, оптимизатор догадывается.
...
Рейтинг: 0 / 0
01.08.2005, 10:29
    #33193699
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.53 Составной Index в большой таблице не используется
> действительно оптимальный - table scan по Entity, отбор сразу этого 1%,
...
Рейтинг: 0 / 0
01.08.2005, 10:42
    #33193742
Izumov Alex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.53 Составной Index в большой таблице не используется
MasterZiv
Записи с entryDate between '2005.06.01' and '2005.06.10' составляют порядка 1 процента от всех записей. Значит селективность по дате будет хорошей и для этого запроса индекс по entryDate был бы полезен. Вывод - хотите, чтобы этот запрос работал, создавайте индекс.
Предложение хорошее, но есть нюанс, БД, по кт мы делаем запросы - сторонний биллинг, поэтому влезать туда и строить индексы не очень хочется, потому что это может нарушить оптимизацию используемых в этом приложении запросов. Поэтому данный вариант нами рассматривается в последнюю очередь.

MasterZiv, спасибо огромное за качественные ответы по вопросам! Считаю что данный мой опыт по исследованию работы оптимизатора не был лишним!
...
Рейтинг: 0 / 0
01.08.2005, 10:49
    #33193766
Izumov Alex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.53 Составной Index в большой таблице не используется
Кстати в итоге оптимальным решением стало вот что:
1. Выгрузка только необходимых колонок и данных за нужный месяц в спец. таблицу ( или период - обычно не больше мес. )
2. На эту таблу вешаются все нужные индексы ( специально подбирались под запросы )
3. Генерится нужный отчет
Результат - все большие таблы идут по индексу, формирование идет порядка 5-10 мин ( до этого было за пару часов ) Причем на ASE по сравнению с ASA по одному периоду отчет формируется в несклько раз быстрее.
...
Рейтинг: 0 / 0
01.08.2005, 21:39
    #33195275
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.53 Составной Index в большой таблице не используется
Izumov Alex
Предложение хорошее, но есть нюанс, БД, по кт мы делаем запросы - сторонний биллинг, поэтому влезать туда и строить индексы не очень хочется, потому что это может нарушить оптимизацию используемых в этом приложении запросов.


Конечно, мысли правильные, главное - не испортить. Но вообще-то лишний некластерный индекс много проблем не должен создавать. И только для вставок. Но видимо в билинге вставки - критично.
Таблица APL или DOL ?
...
Рейтинг: 0 / 0
01.08.2005, 21:41
    #33195276
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.53 Составной Index в большой таблице не используется
Izumov AlexКстати в итоге оптимальным решением стало вот что:
1. Выгрузка только необходимых колонок и данных за нужный месяц в спец. таблицу ( или период - обычно не больше мес. )
2. На эту таблу вешаются все нужные индексы ( специально подбирались под запросы )
3. Генерится нужный отчет


Тоже вариант.

Izumov Alex
Результат - все большие таблы идут по индексу, формирование идет порядка 5-10 мин ( до этого было за пару часов ) Причем на ASE по сравнению с ASA по одному периоду отчет формируется в несклько раз быстрее.

А ты знаешь , почему ? Потому что - Enterprise !!
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE 12.53 Составной Index в большой таблице не используется / 25 сообщений из 31, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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