Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Оптимизация запроса с LEFT JOIN
|
|||
|---|---|---|---|
|
#18+
MasterZiv up wrote: > Попробуйте разобраться с разницей между разными базовыми типами джойнов > - Nested Loop Join, Sort-Merge Join, Hash Join. Как они работают и Разве у нас уже есть Hash Join ? С какой версии ? > сколько сканирований каких таблиц делается в каждом типе джойна. Потом > уже можно будет посмотреть а какие типы поддерживаются в 12.5.3 и что Там есть только Loop Join, Sort-Merge Join Posted via ActualForum NNTP Server 1.4 В 12.5.3 Да, только 2 базовых. В 15 - 3 базовых (с хешем) + вариации от базовых. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2007, 19:30 |
|
||
|
Оптимизация запроса с LEFT JOIN
|
|||
|---|---|---|---|
|
#18+
komrad KruКажется странным, что ни один из индексов не используется. это фича ;) надо создавать объекты в отдельных батчах - мухи отдельно, котлеты отдельно Не всегда. Вот пример когда в одном батче все не создашь: Часто практикуется такой подход когда в одной процедуре создаётся временная таблица , потом вызывается другая процедура которая её наполняет. Если создавать индекс (нужный для будущего запроса) вместе с созданием таблицы, то наполняющая процедура будет работать гораздо медленнее т.к. индекс будет тормозить процесс добавления записей. Поэтому индекс уже создаётся после. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2007, 19:33 |
|
||
|
Оптимизация запроса с LEFT JOIN
|
|||
|---|---|---|---|
|
#18+
в таких случаях делаю так Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2007, 20:00 |
|
||
|
Оптимизация запроса с LEFT JOIN
|
|||
|---|---|---|---|
|
#18+
rcryo авторКажется странным, что ни один из индексов не используется ничего странного, план процедуры строится при компиляции процедуры, а на этот момент индексов еще нет, поэтому и план получается такой. Навидался я такого кода, поэтому и спросил. Я бы не мудрил с хинтами, а вынес бы создание индексов во внешнюю процедуру и из нее бы уже вызывал эту процедуру с запросом и наверное лучше сделать эту процедуру с параметром WITH RECOMPILE. После этого все у вас будет хорошо. Да и на будущее если процедура долго выполняется смотрите реальный план всей процедуры а не отдельных запросов. Удачи. На самом деле выносить создание объектов совершенно необязательно. Нужно просто по другому план посмотреть: Процедуру нужно хотябы один раз выполнить. Я предлагаю добавить set showplan on в тело процедцры перед запросом. При её вызове будет выводиться реальный план. Ниже привожу пример. Временные таблицы создаются в процедуре, там же наполняются, потом строятся индексы и наконец выполняется запрос. create procedure dbo.test_idx_inside @i1 int , @i2 int as create table #t1 (id int, i int) create table #t2 (id int, j int) declare @i int select @i = 0 while @i < 1000 begin insert into #t1 values (@i + 1, @i+1) insert into #t2 values (@i + 2, @i+2) select @i = @i+1 end create index idx_1 on #t1(id) create index idx_2 on #t2(id) set showplan on select #t1.i, #t2.j from #t1 inner join #t2 on #t1.id = #t2.id where #t1.id between @i1 and @i2 go execute dbo.test_idx_inside 30, 70 go ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2007, 21:56 |
|
||
|
Оптимизация запроса с LEFT JOIN
|
|||
|---|---|---|---|
|
#18+
salt wrote: > Если план строится при компиляции, то можно ли на него посмотреть сразу > после компиляции? Нет. Только при выполнении. План не при компиляции кстати строится, а при первом выполнении. > И как в таком случае поможет создание индексов во внешней процедуре - > ведь для внутренней процедуры план уже построен при компиляции ? > А, понял. WITH RECOMPILE заставляет перекомпилировать вложенную процедуру. > WITH RECOMPILE вам не нужен. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2007, 22:23 |
|
||
|
Оптимизация запроса с LEFT JOIN
|
|||
|---|---|---|---|
|
#18+
rcryo wrote: > WITH RECOMPILE дает команду перекомпилить процедуру перед выполнением > когда уже индексы созданы а также поможет также оптимизатору Чушь собачья. WITH RECOMPILE заставляет процедуру перекомпилироваться КАЖДЫЙ РАЗ перед выполнением. Т.е. после выполнения она выбрасывается из процедурного кэша. При этом когда в след. раз процедура выполняется, она должна строит свой план. При этом построение плана ничем не отличается от случая ее первого выполнения без WITH RECOMPILE. Временных таблиц нет, индексов нет. > сориентироваться на реальных данных во временных таблицах на момент > выполнения процедуры. В одной ситуации у вас там может быть примерно > одинаковое количество записей, в другой - в соотношении 1:1000:1000000. > тогда при любом соотношении будет выбран оптимальный план. Этому with recompile не поможет. > У человека индексы создаются в той же процедуре что и выполняется > запрос. У меня ASE 12.5.3 не использует такие индексы в запросах в той > же процедуре Это еще не значит, что он (оптимизатор) их не видит. Вы можете съесть лимон целиком ? Можете. Но не едите. Но из факта, что вы его не едите, не следует, что вы не можете этого сделать. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2007, 22:29 |
|
||
|
Оптимизация запроса с LEFT JOIN
|
|||
|---|---|---|---|
|
#18+
MasterZiv rcryo wrote: > У человека индексы создаются в той же процедуре что и выполняется > запрос. У меня ASE 12.5.3 не использует такие индексы в запросах в той > же процедуре Это еще не значит, что он (оптимизатор) их не видит. Вы можете съесть лимон целиком ? Можете. Но не едите. Но из факта, что вы его не едите, не следует, что вы не можете этого сделать. Posted via ActualForum NNTP Server 1.4 Оптимизатор "видит" индексы созданные в той же процедуре где и запрос. У меня ASE 12.5.3 не использует такие индексы в запросах в той > же процедуре Попробуйте set showplan on в теле процедуры поставить и потом её выполнить. Если индексы будут нужны для запроса они будут в плане. См мой пример выше. Если посмотреть план, то будет видно, что индексы используются, хотя создаются они в той же процедуре где и запрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2007, 22:51 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=35024828&tid=2011753]: |
0ms |
get settings: |
9ms |
get forum list: |
30ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
65ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
| others: | 263ms |
| total: | 450ms |

| 0 / 0 |
