powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE 12.53 Составной Index в большой таблице не используется
31 сообщений из 31, показаны все 2 страниц
ASE 12.53 Составной Index в большой таблице не используется
    #33186236
Izumov Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начала скажу на 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
ASE 12.53 Составной Index в большой таблице не используется
    #33186612
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя нет вообще индекса по

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
ASE 12.53 Составной Index в большой таблице не используется
    #33186696
Izumov Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может я не всего понимаю конечно, но ведь в индексе по Entry поле AccountID - первое, так почему же тогда при связке по этому полю индекс не подхватывается? Или индекс берется, только когда это поле стоит в условии напрямую, те AccountID = 1234? Те при его участии в джойне индекс что ли не берется?
Как то странно это...
...
Рейтинг: 0 / 0
ASE 12.53 Составной Index в большой таблице не используется
    #33189899
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Izumov AlexКак то странно это...
Ничего странного. В ASE стоимостной оптимизатор и он реально считает, выгодно ли использовать индекс или нет. Если какой-то случай совсем непонятный - могу его объяснить.
...
Рейтинг: 0 / 0
ASE 12.53 Составной Index в большой таблице не используется
    #33189917
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Izumov Alexв индексе по Entry поле AccountID - первое, так почему же тогда при связке по этому полю индекс не подхватывается?
Конкретно здесь оптимизатор уже выбрал стратегию TableScan для таблицы, так что он уже по этой таблице индекс использовать не будет - он по ней бежит и из нее делает join-ы на другие таблицы.
...
Рейтинг: 0 / 0
ASE 12.53 Составной Index в большой таблице не используется
    #33190307
Izumov Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А кто бы мне объяснил с каких пор для оптимизатора Table Scan лучше поиска по индексу, причем по 2м полям? Тем более с условием?
...
Рейтинг: 0 / 0
ASE 12.53 Составной Index в большой таблице не используется
    #33190357
Izumov Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начала скажу, что проблему с предыдущим запросом мы таки решили, добавив принудительно ХИНТ по индексу:
запрос:
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
ASE 12.53 Составной Index в большой таблице не используется
    #33190506
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Izumov AlexА кто бы мне объяснил с каких пор для оптимизатора Table Scan лучше поиска по индексу, причем по 2м полям? Тем более с условием?

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

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


Не понятно, чего вы там добились, как был плохой план, так и остался.
Вместо table scan раньше - index scan теперь. Чем лучше ? Не понятно. Даже хуже, потому что index scan стоит по IO больше.
Вам надо по entryDate индекс сделать, это - единственный SARG в этом запросе.
...
Рейтинг: 0 / 0
ASE 12.53 Составной Index в большой таблице не используется
    #33190515
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напиши пожалуйста результаты выполнения этих запросов :
Код: 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
ASE 12.53 Составной Index в большой таблице не используется
    #33190682
Izumov Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
ASE 12.53 Составной Index в большой таблице не используется
    #33190721
Izumov Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
ASE 12.53 Составной Index в большой таблице не используется
    #33193494
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как раз чем больше таблица, тем выгоднее может быть table scan вместо бесполезного index forward scan - больше разница в IO.

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

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

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

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

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

А все-таки Вы бы могли прокомментировать мой пост от 28 июл 05, 19:28, когда после применения оператора отрицания и функции оптимизатор стал сам подхватывать индексы?
...
Рейтинг: 0 / 0
ASE 12.53 Составной Index в большой таблице не используется
    #33193527
Izumov Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CripА статистики давно обновляли раз хинт помогает?
СТатистики обновляли кучу раз.. Тем более ХИНТ по сути не помогает ( см. там идет Forward Scan по индексу, это не лучше чем Table Scan, даже местами хуже)
...
Рейтинг: 0 / 0
ASE 12.53 Составной Index в большой таблице не используется
    #33193570
Фотография 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

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

Также еще рекомендую почитать эту статью
FAQ .
...
Рейтинг: 0 / 0
ASE 12.53 Составной Index в большой таблице не используется
    #33193677
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
ASE 12.53 Составной Index в большой таблице не используется
    #33193686
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Izumov Alex CripА статистики давно обновляли раз хинт помогает?
СТатистики обновляли кучу раз.. Тем более ХИНТ по сути не помогает ( см. там идет Forward Scan по индексу, это не лучше чем Table Scan, даже местами хуже)

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

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

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


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


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

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

А ты знаешь , почему ? Потому что - Enterprise !!
...
Рейтинг: 0 / 0
ASE 12.53 Составной Index в большой таблице не используется
    #33195374
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вступлюсь за АСА. Могу сказать, что если грамотно сделать(а еще лучше
грамотно спроектировать), то и в АСА летает. А то, как сервера делают
произведение трех таблиц с предварительным/последующим отбором с откровенно
кривой оптимизацией - не показатель. (Именно откровенно, т.к. если автор
подчеркнул, что оптимизация запросов проводилась, то непонятно почему так
плохо)
Я эту тематику (выборка по большому объему данных в АСА) знаю хорошо,
исследовал довольно плотно. Недавно поднимал вопрос именно об использовании
индекса на поле с типом дата, и тогда в моей таблице было вроде 50 млн.
записей. Достаточно интересные эффекты изложил, кто желает - можете
поискать.


Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
ASE 12.53 Составной Index в большой таблице не используется
    #33195580
Izumov Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv Конечно, мысли правильные, главное - не испортить. Но вообще-то лишний некластерный индекс много проблем не должен создавать. И только для вставок. Но видимо в билинге вставки - критично.
Таблица APL или DOL ?
Таблицы там все DOL, и операции вставки очень критичны. Создать проблем и по моему мнению не должен, но в любом случае это имеет смысл делать после согласования со сторонней компанией, шоб потом на нас все глюки не списали %) Поэтому и ищем обходные пути, чтобы меньшей кровью все сделать без привлечения сторонних лиц.
...
Рейтинг: 0 / 0
ASE 12.53 Составной Index в большой таблице не используется
    #33195601
Izumov Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поясню кое-что, для объективности изложения материала.
Когда я говорил о большом выигрыше по скорости у АСЕ, то немного забыл, что в данный момент, сравнивались сервера под разной нагрузкой и производительностью. ASE в данный момент работает без нагрузки, и памяти у него в 2 раза больше, а на ASA крутится биллинг. Поэтому реальные цифры выигрыша по скороси будут известны в ближайшее (я надеюсь %)) время, после перехода целиком на ASE, но что поражает уже сейчас - бэкап базы на ASA ( 20GB ) занимает порядка 8-10 часов, тоже самое на ASE - 10 (!!!!) минут.
И изначально вопрос возник как раз изза того, что на ASA время работы запросов нареканий не вызывало ( порядка 20-40 мин считалось приемлемым на онлайн-тарифицируемом биллинге ), поэтому вопросами оптимизации даже не озаботились. После переезда на ASE, теже запросы почему стали работать очень долго, поэтому и пришлось садиться парсить логи оптимизатора.
...
Рейтинг: 0 / 0
ASE 12.53 Составной Index в большой таблице не используется
    #33195708
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Izumov Alex wrote:

> И изначально вопрос возник как раз изза того, что на ASA время работы
> запросов нареканий не вызывало ( порядка 20-40 мин считалось приемлемым
> на онлайн-тарифицируемом биллинге ), поэтому вопросами оптимизации даже
> не озаботились.

А на ASA оптимизировать не пробовали? Попробуйте - помогает ;).

> После переезда на ASE, теже запросы почему стали
> работать очень долго

Это нормально .
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
ASE 12.53 Составной Index в большой таблице не используется
    #33195731
Izumov Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim2000
А на ASA оптимизировать не пробовали? Попробуйте - помогает ;).

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


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