Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
Есть апдейт (это расчет рыночной стоимости) update tr_bill_in_portfolio set rate = convert(decimal(30,10),(select sum(isnull(#rate_by_day.rate,0)*tmp_bill_in_qty_by_day.qty) from tmp_bill_in_qty_by_day, #rate_by_day where tmp_bill_in_qty_by_day.sub_id=tr_bill_in_portfolio.subacc_id and tmp_bill_in_qty_by_day.stock_id=tr_bill_in_portfolio.stock_id and #rate_by_day.stock_id=tmp_bill_in_qty_by_day.stock_id and #rate_by_day.day=tmp_bill_in_qty_by_day.day )/ @days) where id=@id and tr_bill_in_portfolio.place_id=@tmp_com_id Наблюдаются страшнейшие тормоза...конечно тут играет роль большой объем таблиц ,например tmp_bill_in_qty_by_day около 900000 записей,#rate_by_day около 200000... В частости дико тормозит не только выборка данных, но и конвертация в децимал. Может можно что-то сделать с этим? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 13:52 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
есть вот такие индексы id subacc_id stock_id place_id id,place_id,act_acc_id id, place_id, subacc_id, stock_id ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 14:13 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
Че индексы... ты план запроса покажи... set showplan on set noexec on и прогони свой запрос... И покажи DDL этих таблиц и индексов... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 15:12 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
Fantasmo пишет: > Наблюдаются страшнейшие тормоза...конечно тут играет роль большой объем > таблиц ,например tmp_bill_in_qty_by_day около 900000 > записей,#rate_by_day около 200000... В частости дико тормозит не только > выборка данных, но и конвертация в децимал. Конвертация в децимал вас не должна волновать вообще. Вас должен волновать план запроса. Конвертация в децимал будет в любом случае занимать много меньше времени чем обработка одной записи. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 15:27 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
create table #accounts ( id numeric, bill_sum decimal(30,10), bill_price decimal(30,10) null ) create table #days (day datetime) create table #qty_by_day ( stock_id numeric, sub_id numeric, day datetime, qty decimal(30,10) ) create table #rate_by_day ( day datetime, stock_id numeric, rate decimal(30,10) null, max_day datetime null, min_day datetime null ) create table #tmp_days(day datetime) -------------------------------------------------------- print 'tr_bill_in_portfolio' SETUSER 'dbo' go create table dbo.tr_bill_in_portfolio ( id numeric(18, 0) not null, subacc_id numeric(18, 0) not null, stock_id numeric(18, 0) not null, qty decimal(30, 10) not null, rate decimal(30, 10) null, bill_sum decimal(30, 10) null, place_id numeric(18, 0) null, act_acc_id numeric(18, 0) null ) lock datapages on 'default' go print 'tr_bill_in_portfolio_01' create nonclustered index tr_bill_in_portfolio_01 on dbo.tr_bill_in_portfolio (id) on 'default' go print 'tr_bill_in_portfolio_02' create nonclustered index tr_bill_in_portfolio_02 on dbo.tr_bill_in_portfolio (subacc_id) on 'default' go print 'tr_bill_in_portfolio_03' create nonclustered index tr_bill_in_portfolio_03 on dbo.tr_bill_in_portfolio (stock_id) on 'default' go print 'tr_bill_in_portfolio_04' create nonclustered index tr_bill_in_portfolio_04 on dbo.tr_bill_in_portfolio (place_id) on 'default' go print 'tr_bill_in_portfolio_05' create nonclustered index tr_bill_in_portfolio_05 on dbo.tr_bill_in_portfolio (id, place_id, act_acc_id) on 'default' go print 'tr_bill_in_portfolio_06' create nonclustered index tr_bill_in_portfolio_06 on dbo.tr_bill_in_portfolio (id, place_id, subacc_id, stock_id) on 'default' go SETUSER go ----------------------------------------------- update tr_bill_in_portfolio set rate = convert(decimal(30,10),(select sum(isnull(#rate_by_day.rate,0)*#qty_by_day.qty) from #qty_by_day, #rate_by_day where #qty_by_day.sub_id=tr_bill_in_portfolio.subacc_id and #qty_by_day.stock_id=tr_bill_in_portfolio.stock_id and #rate_by_day.day=#qty_by_day.day and #rate_by_day.stock_id=#qty_by_day.stock_id )/ @days) where id=@id and tr_bill_in_portfolio.place_id=@tmp_com_id ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 15:35 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
План --------------------- QUERY PLAN FOR STATEMENT 245 (at line 1035). STEP 1 The type of query is UPDATE. The update mode is direct. FROM TABLE tr_bill_in_portfolio Nested iteration. Index : tr_bill_in_portfolio_05 Forward scan. Positioning by key. Keys are: id ASC place_id ASC Run subquery 1 (at nesting level 1). Using I/O Size 4 Kbytes for index leaf pages. With LRU Buffer Replacement Strategy for index leaf pages. Using I/O Size 4 Kbytes for data pages. With LRU Buffer Replacement Strategy for data pages. TO TABLE tr_bill_in_portfolio NESTING LEVEL 1 SUBQUERIES FOR STATEMENT 245. QUERY PLAN FOR SUBQUERY 1 (at nesting level 1 and at line 1036). Correlated Subquery. Subquery under an EXPRESSION predicate. STEP 1 The type of query is SELECT. Evaluate Ungrouped SUM OR AVERAGE AGGREGATE. FROM TABLE #qty_by_day Nested iteration. Table Scan. Forward scan. Positioning at start of table. Using I/O Size 4 Kbytes for data pages. With LRU Buffer Replacement Strategy for data pages. FROM TABLE #rate_by_day Nested iteration. Table Scan. Forward scan. Positioning at start of table. Using I/O Size 4 Kbytes for data pages. With LRU Buffer Replacement Strategy for data pages. END OF QUERY PLAN FOR SUBQUERY 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 16:17 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
В начале поста запрос немного другой. Смотреть на этот;) update tr_bill_in_portfolio set rate = convert(decimal(30,10),(select sum(isnull(#rate_by_day.rate,0)*#qty_by_day.qty) from #qty_by_day, #rate_by_day where #qty_by_day.sub_id=tr_bill_in_portfolio.subacc_id and #qty_by_day.stock_id=tr_bill_in_portfolio.stock_id and #rate_by_day.day=#qty_by_day.day and #rate_by_day.stock_id=#qty_by_day.stock_id )/ @days) where id=@id and tr_bill_in_portfolio.place_id=@tmp_com_id ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 16:29 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
Fantasmo пишет: > FROM TABLE > #qty_by_day > Nested iteration. > Table Scan. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > Forward scan. > Positioning at start of table. > Using I/O Size 4 Kbytes for data pages. > With LRU Buffer Replacement Strategy for data pages. > > > FROM TABLE > #rate_by_day > Nested iteration. > Table Scan. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > Forward scan. > Positioning at start of table. > Using I/O Size 4 Kbytes for data pages. > With LRU Buffer Replacement Strategy for data pages. Вот если от этих table scan-ов избавитесь, то будет вам счастье процентов на 95. Избавляться надо путем добавления индексов (если нет еще) на условия JOIN-ов и корреляции и проставления в запрос хинтов INDEX с ними. Запрос после этого надо тщательно тестировать с проверкой плана и IO. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 16:34 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
MasterZiv Вот если от этих table scan-ов избавитесь, то будет вам счастье процентов на 95. Избавляться надо путем добавления индексов (если нет еще) на условия JOIN-ов и корреляции и проставления в запрос хинтов INDEX с ними. это зависит от размера временных таблиц... вполне возможно, что при малом количестве записей в них индексы счастья не принесут :) MasterZiv Запрос после этого надо тщательно тестировать с проверкой плана и IO. это да, без этого никуда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 16:38 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
FantasmoТаблицы здоровенные ну тогда MasterZiv прав надо избавляться от table scan замерьте сколько по времени у вас будут рисоваться необходимые индексы по этим #-таблицам если этот overhead вас устроит, то рисуйте индексы после заполнения этих таблиц иначе - переписывать/модифицировать логику запроса/процедуры... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 17:25 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
komrad пишет: > это зависит от размера временных таблиц... > вполне возможно, что при малом количестве записей в них индексы счастья > не принесут :) Согласен на все 100%. Однако аффтар уже написал что по крайней мере одна таблица имеет около 1M строк. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 17:36 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
komrad пишет: > если этот overhead вас устроит, то рисуйте индексы после заполнения этих > таблиц Кстати если так делать, то индексы могут подхватиться оптимизатором и без хинтов. Одна из техник работы с индексами на временных таблицах заключается в создании индексов ПОСЛЕ заполнения временной таблицы. Тогда оптимизатор будет уже знать статистику по полям индекса и будет ее учитывать. Но это не на всех версиях ASE. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 17:39 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
Причем почти наверняка придется фиксировать хинтами индексы на временные таблицы, или еще лучше сначала залить данные во временные таблицы, потом создать индексы, а в другом батче или процедуре уже использовать это богатство, дабы облегчить жизнь оптимизатору... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 17:43 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
Есть только одна проблема. Вроде бы ASE 12.0 не будет использовать индексы в процедуре на временные таблицы. т.е в таком случае индекс на временную таблицу просто лишняя трата времени ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 20:01 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
А делать не временные как-то не очень хочется... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2007, 20:03 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
Сделал таблицы не временными... теперь переполняется лог при инсерте... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2007, 11:22 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
FantasmoСделал таблицы не временными... теперь переполняется лог при инсерте... вставлять батчами, по нескольку десятков тысяч, а не "одним селектом всё" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2007, 11:48 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
komrad FantasmoСделал таблицы не временными... теперь переполняется лог при инсерте... вставлять батчами, по нескольку десятков тысяч, а не "одним селектом всё" где созданы "невременные" таблицы? в боевой базе или tempdb ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2007, 11:49 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
в боевой а как батчами? как ограничить выборку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2007, 11:57 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
Fantasmoв боевой а как батчами? как ограничить выборку? 1) попробуй в tempdb 2 и 3) используя set rowcount N (отключается: set rowcount 0 ) или в цикле, опираясь на уникальные идентификаторы вносимых записей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2007, 12:03 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
Fantasmo пишет: > Есть только одна проблема. Вроде бы ASE 12.0 не будет использовать > индексы в процедуре на временные таблицы. > т.е в таком случае индекс на временную таблицу просто лишняя трата времени Я думаю что это голословное заявление. Вообще про оптимизатор не стоит говорить чего-то определенного. Хотя фраза "Вроде бы" немного исправляет дело... Короче, в 11.9 замечательно в процедурах использовались индексы на временные таблицы. Почему бы им не быть использоваными в 12.0 ? Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2007, 15:58 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
Fantasmo пишет: > Сделал таблицы не временными... теперь переполняется лог при инсерте... Э ... Я что-то пропустил ? А зачем это ? Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2007, 15:59 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
MasterZiv Я думаю что это голословное заявление. Вообще про оптимизатор не стоит говорить чего-то определенного. Хотя фраза "Вроде бы" немного исправляет дело... Видимо имелось ввиду утверждение, что если имеется последовательность действий - создаются временные таблицы, создаются индексы, заливаются данные и тут же начинается с ними работа, то оптимизатор не учитывает реальное состояние дел с временными таблицами. Поэтому Sybase рекомендует следующую последовательность действий - создаются временные таблицы - заливаются данные - создаются индексы - зовется внутренняя ХП, которая уже и обрабатывает эти данные... Но всегда остается возможность выкрутить оптимизатору руки :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2007, 17:10 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
лень пишет: > Поэтому Sybase рекомендует следующую последовательность действий > - создаются временные таблицы > - заливаются данные > - создаются индексы Этого уже достаточно. > - зовется внутренняя ХП, которая уже и обрабатывает эти данные... Не обязательно звать внутреннюю ХП. И в пределах одной ХП может работать, только надо это проверить на конкретной версии ASE. (В смысле где-то может и не работать). Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2007, 19:34 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
MasterZiv Не обязательно звать внутреннюю ХП. И в пределах одной ХП может работать, только надо это проверить на конкретной версии ASE. (В смысле где-то может и не работать). работать то будет, но только оптимизатор в данном случае будет считать, что таблица состоит из 10 столбцов и 10 записей в них ;) по крайней мере в 12.5 ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2007, 23:16 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
MasterZiv Fantasmo пишет: > Есть только одна проблема. Вроде бы ASE 12.0 не будет использовать > индексы в процедуре на временные таблицы. > т.е в таком случае индекс на временную таблицу просто лишняя трата времени Я думаю что это голословное заявление. Вообще про оптимизатор не стоит говорить чего-то определенного. Хотя фраза "Вроде бы" немного исправляет дело... Короче, в 11.9 замечательно в процедурах использовались индексы на временные таблицы. Почему бы им не быть использоваными в 12.0 ? Posted via ActualForum NNTP Server 1.3 Скажу подругому. Работать не будет. 1) Проверено уже 2) Оптимизатор на момент компиляции не знает про индексы и данные во временной таблице. Так что индекс просто не будет использоваться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 09:05 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
komrad пишет: > работать то будет, но только оптимизатор в данном случае будет считать, > что таблица состоит из 10 столбцов и 10 записей в них ;) по крайней мере > в 12.5 ;) Нет, не обязательно. Я хотел написать, но почему-то не написал. Ерик Майнер , ведущий инженер группы оптимизатора ASE, обсуждал как-то именно этот случай в (кажется) sybase.public.ase.performance+tuning Он сказал, что после создания индекса увеличивается какой-то внутренний счетчик состояния схемы данных, после чего процедура переоптимизируется (план перестраивается), и в этом случае должна уже быть реальная статистика о таблице, поскольку ее собирает CREATE INDEX. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 10:38 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
Fantasmo пишет: > Короче, в 11.9 замечательно в процедурах использовались индексы на временные > таблицы. Почему бы им не быть использоваными в 12.0 ? > Скажу подругому. Работать не будет. > 2) Оптимизатор на момент компиляции не знает про индексы и данные во > временной таблице. Да, не знает. Так что индекс просто не будет использоваться. Во-первых, смотри мой пред. пост. Во-вторых, ну хорошо, не хочет оптимизатор брать индекс сам - можно же и хинт написать, (INDEX 1) , как правило, одного индекса там достаточно. Это старинная техника, применялась еще вроде как в 11.5 и 11.0. Ну могу я конечно путать конкретные версии, но это там между 11.0 и 11.5. 11.9 уже современный достаточно сервер, мы с ним работали много, и работали там индексы на временные таблицы. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 10:45 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
MasterZiv Fantasmo пишет: Во-первых, смотри мой пред. пост. Во-вторых, ну хорошо, не хочет оптимизатор брать индекс сам - можно же и хинт написать, (INDEX 1) , как правило, одного индекса там достаточно. Это старинная техника, применялась еще вроде как в 11.5 и 11.0. Ну могу я конечно путать конкретные версии, но это там между 11.0 и 11.5. 11.9 уже современный достаточно сервер, мы с ним работали много, и работали там индексы на временные таблицы. Posted via ActualForum NNTP Server 1.3 Хинт не прокатит Пробовал. Он не используется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 11:09 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
MasterZiv пишет: Еще ссылок. http://groups.google.com/group/sybase.public.ase.performance+tuning/search?group=sybase.public.ase.performance%2Btuning&q=indices+on+temp+table Просто хочу подчекрнуть, что это лишь миф, что во временных таблицах не могут использоваться индексы. Они МОГУТ использоваться. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 11:41 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
MasterZiv пишет: Вот ссылка на один из разговоров на эту тему. Евгений Корольков и я там кстати тоже присутствовали. http://groups.google.com/group/sybase.public.ase.performance+tuning/tree/browse_frm/thread/22f143a67e3431f7/d7121fb6bc0d1c3f?_done=%2Fgroup%2Fsybase.public.ase.performance%2Btuning%2Fbrowse_frm%2Fthread%2F22f143a67e3431f7%2Fd7121fb6bc0d1c3f%3Flnk%3Dgst%26q%3DEric%2BMiner%2Bindexes%2Btemporary%2Btable%2Busing%26rnum%3D2%26&lnk=gst&q=Eric+Miner+indexes+temporary+table+using&rnum=2 Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 11:41 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
А можно вкратце как использовать все таки индекс? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 12:29 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
FantasmoА можно вкратце как использовать все таки индекс? А какие ваши доказательства того, что он не используется? Хоть бы план запроса привел. А то все "зимы не будет, зимы не будет"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 14:33 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
лень FantasmoА можно вкратце как использовать все таки индекс? А какие ваши доказательства того, что он не используется? Хоть бы план запроса привел. А то все "зимы не будет, зимы не будет"... если делать так create table #t insert into #t create index #t_01 select ... from #t (index #t_01)... Использоваться он не будет 100%, будет обычный table scan. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 14:44 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
Я бы не был бы столь самоуверен. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Правда сервер 12.5.3, но мне помнится что и в 12.0 такое же поведение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 15:36 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
:D Server Message: Number 307, Severity 10 Line 11: Index 'idx_01' specified as optimizer hint in the FROM clause of table '#t' does not exist. Optimizer will choose another index instead. QUERY PLAN FOR STATEMENT 1 (at line 1). STEP 1 The type of query is CREATE TABLE. QUERY PLAN FOR STATEMENT 2 (at line 2). STEP 1 The type of query is CREATE INDEX. TO TABLE #t QUERY PLAN FOR STATEMENT 3 (at line 3). STEP 1 The type of query is DECLARE. QUERY PLAN FOR STATEMENT 4 (at line 4). STEP 1 The type of query is SELECT. QUERY PLAN FOR STATEMENT 5 (at line 5). STEP 1 The type of query is COND. QUERY PLAN FOR STATEMENT 6 (at line 7). STEP 1 The type of query is INSERT. The update mode is direct. TO TABLE #t QUERY PLAN FOR STATEMENT 7 (at line 8). STEP 1 The type of query is SELECT. QUERY PLAN FOR STATEMENT 8 (at line 10). STEP 1 The type of query is SET OPTION ON. QUERY PLAN FOR STATEMENT 9 (at line 11). STEP 1 The type of query is SELECT. FROM TABLE #t 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 16:06 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
Этот результат получился если всю процедуру запустить. А если по частям, сначала таблица потом инсерт и отдельно запустить селект, то выборка идет по индексу, как у вас... И что делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 16:09 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
FantasmoЭтот результат получился если всю процедуру запустить. А если по частям, сначала таблица потом инсерт и отдельно запустить селект, то выборка идет по индексу, как у вас... И что делать? То что рекомендует Sybase - разбить на 2 батча, или 2 процедуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 16:15 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
Fantasmo пишет: > если делать так > > create table #t > insert into #t > create index #t_01 > > select ... > from #t (index #t_01)... > > Использоваться он не будет 100%, будет обычный table scan. Так я же говорю, select ... from #t (index 1)... надо писать. Естественно, по (index #t_01) он использоваться НЕ будет. Потому что ПЛАН ЗАПРОСА ПРОЦЕДУРЫ СОЗДАЕТСЯ ДО ЕЕ ВЫПОЛНЕНИЯ, и индекс #t_01 в этот момент еще не существует. А вот если указывать индекс по номеру, то он БУДЕТ использоваться. (хотя это и кажется странным, видимо при этом в план тупо пишется идентификатор индекса минуя фазу разрешения имени индекса в его идентификатор и поэтому это прокатывает) Номера индексов- это идентификаторы их в SYSINDEXES. 0 - сама таблица (forced table scan) 1 - кластерный индекс 2 - первый некластерный, и т.д. Но обычно хватает ОДНОГО индекса, который единственный обычно. На DOL-таблицах индекса 1 нет, там сразу с 2-х. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 18:38 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
лень пишет: > То что рекомендует Sybase - разбить на 2 батча, или 2 процедуры. Господа, ну сколько говорить-то можно - нет, не обязательно разбивать. Это очень устаревшая техника, сейчас никакого смысла это делать нет. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 18:40 |
|
||
|
Как ускорить?
|
|||
|---|---|---|---|
|
#18+
MasterZiv лень пишет: > То что рекомендует Sybase - разбить на 2 батча, или 2 процедуры. Господа, ну сколько говорить-то можно - нет, не обязательно разбивать. Это очень устаревшая техника, сейчас никакого смысла это делать нет. Posted via ActualForum NNTP Server 1.3 Ну не знаю :) Просто когда в июне 2005-го я слушал г-на Хромова :) , он рассказывал именно о таком подходе :) Возможно с тех пор много воды утекло... Но согласен с тем, что не обязательно так делать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2007, 21:03 |
|
||
|
|

start [/forum/topic.php?all=1&fid=55&tid=2012270]: |
0ms |
get settings: |
6ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
96ms |
get tp. blocked users: |
2ms |
| others: | 224ms |
| total: | 410ms |

| 0 / 0 |
