Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 showplan_text again :)  [new]
GoldDragon
Member

Откуда: Canada
Сообщений: 317
Я новичок в администрации SQL Server-а. И только через этот Форум я узнал о showplan_text.
Но не мог найти, где бы было объяснено, как разбирать техт, который я получаю с его помощью.

К примеру, вот такой:
 |--Sort(ORDER BY:([IPM_WBS_T].[WBS_ID_EXTERNAL] ASC))
       |--Compute Scalar(DEFINE:([Expr1036]=If ([IPM_WBS_T].[WBS_STATUS_ID]<3 AND [IPM_WBS_T].[TREE_LEVEL]<6) then NULL else [Expr1032], [Expr1037]=If ([IPM_WBS_T].[WBS_STATUS_ID]<3 AND [IPM_WBS_T].[TREE_LEVEL]<6) then NULL else [Expr1033]))
            |--Stream Aggregate(GROUP BY:([IPM_WBS_T].[WBS_YEAR], [IPM_WBS_T].[WBS_ID]) DEFINE:([Expr1030]=MIN([IPM_WBS_T].[UPDATING_DATE_S]), [Expr1031]=MAX([IPM_WBS_T].[UPDATING_DATE_F]), [Expr1032]=MIN([IPM_WBS_T].[PLANNING_DATE_S]), [Expr1033]=MAX([IPM
                 |--Sort(ORDER BY:([IPM_WBS_T].[WBS_YEAR] ASC, [IPM_WBS_T].[WBS_ID] ASC))
                      |--Merge Join(Inner Join, MANY-TO-MANY MERGE:([IPM_WBS_T].[WBS_YEAR])=([IPM_WBS_T].[WBS_YEAR]), RESIDUAL:(([IPM_WBS_T].[WBS_YEAR]=[IPM_WBS_T].[WBS_YEAR] AND [IPM_WBS_T].[WBS_ID_EXTERNAL]>=[IPM_WBS_T].[WBS_ID_EXTERNAL]) AND [IPM_WBS_T]
                           |--Sort(ORDER BY:([IPM_WBS_T].[WBS_YEAR] ASC))
                           |    |--Nested Loops(Inner Join, WHERE:((([IPM_WBS_T].[WBS_ID_EXTERNAL]<[IPM_WBS_T].[WBS_ID_EXTERNAL]+[Expr1019] AND [IPM_WBS_T].[WBS_ID_EXTERNAL]>=[IPM_WBS_T].[WBS_ID_EXTERNAL]) OR [IPM_WBS_T].[TREE_LEVEL]=2) OR [IPM_WBS_T].[TRE
                           |         |--Compute Scalar(DEFINE:([Expr1019]=isnull([IPMS_TRANSLATELEVEL_T].[LEVEL_VALUE_MIN], 0)))
                           |         |    |--Hash Match(Inner Join, HASH:([IPMS_TRANSLATELEVEL_T].[LEVEL_TREE])=([IPM_WBS_T].[TREE_LEVEL]), RESIDUAL:([IPM_WBS_T].[TREE_LEVEL]=[IPMS_TRANSLATELEVEL_T].[LEVEL_TREE]))
                           |         |         |--Nested Loops(Inner Join, OUTER REFERENCES:([IPMS_TRANSLATELEVEL_T].[LEVEL_TREE]))
                           |         |         |    |--Nested Loops(Inner Join, OUTER REFERENCES:([IPMS_TRANSLATELEVEL_T].[LEVEL_TREE]))
                           |         |         |    |    |--Clustered Index Scan(OBJECT:([IPM_DEV].[dbo].[IPMS_TRANSLATELEVEL_T].[PK_IPMS_TRANSLATELEVEL_T]), ORDERED FORWARD)
                           |         |         |    |    |--Clustered Index Seek(OBJECT:([IPM_DEV].[dbo].[IPMS_TRANSLATELEVEL_T].[PK_IPMS_TRANSLATELEVEL_T]), SEEK:([IPMS_TRANSLATELEVEL_T].[LEVEL_TREE]=[IPMS_TRANSLATELEVEL_T].[LEVEL_TREE]) ORDERED FORWARD)
                           |         |         |    |--Clustered Index Seek(OBJECT:([IPM_DEV].[dbo].[IPMS_TRANSLATELEVEL_T].[PK_IPMS_TRANSLATELEVEL_T]), SEEK:([IPMS_TRANSLATELEVEL_T].[LEVEL_TREE]=[IPMS_TRANSLATELEVEL_T].[LEVEL_TREE]) ORDERED FORWARD)
                           |         |         |--Hash Match(Right Semi Join, HASH:([Expr1058])=([IPM_WBS_T].[WBS_ID_EXTERNAL]), RESIDUAL:([IPM_WBS_T].[WBS_ID_EXTERNAL]=[Expr1058]))
                           |         |              |--Compute Scalar(DEFINE:([Expr1058]=floor([IPM_WBS_T].[WBS_ID_EXTERNAL]/10000000000000000000)*10000000000000000000))
                           |         |              |    |--Hash Match(Right Semi Join, HASH:([IPM_WBS_T].[WBS_ID])=([IPM_WBS_T].[WBS_ID]), RESIDUAL:([IPM_WBS_T].[WBS_ID]=[IPM_WBS_T].[WBS_ID]))
                           |         |              |         |--Filter(WHERE:([Expr1044] OR [Expr1045]))
                           |         |              |         |    |--Nested Loops(Left Semi Join, WHERE:([Expr1044])OUTER REFERENCES:([IPM_WBS_T].[OBS_ID_PERFORM]), DEFINE:([Expr1045] = [PROBE VALUE]))
                           |         |              |         |         |--Nested Loops(Left Semi Join, OUTER REFERENCES:([IPM_WBS_T].[OBS_ID_RESP]), DEFINE:([Expr1044] = [PROBE VALUE]))
                           |         |              |         |         |    |--Clustered Index Scan(OBJECT:([IPM_DEV].[dbo].[IPM_WBS_T].[PK_IPM_WBS_T]), WHERE:(([IPM_WBS_T].[WBS_YEAR]=2005 OR ((2005>=datepart(year, [IPM_WBS_T].[BASE_DATE_S]) OR 2005<=date
                           |         |              |         |         |    |--Row Count Spool
                           |         |              |         |         |         |--Clustered Index Seek(OBJECT:([IPM_DEV].[dbo].[IPM_OBS_T].[PK_IPM_OBS_T]), SEEK:([IPM_OBS_T].[OBS_ID]=[IPM_WBS_T].[OBS_ID_RESP]),  WHERE:(((([IPM_OBS_T].[OBS_ID_EXTERNAL]>=
                           |         |              |         |         |--Row Count Spool
                           |         |              |         |              |--Clustered Index Seek(OBJECT:([IPM_DEV].[dbo].[IPM_OBS_T].[PK_IPM_OBS_T]), SEEK:([IPM_OBS_T].[OBS_ID]=[IPM_WBS_T].[OBS_ID_PERFORM]),  WHERE:(((([IPM_OBS_T].[OBS_ID_EXTERNAL]>=10
                           |         |              |         |--Index Scan(OBJECT:([IPM_DEV].[dbo].[IPM_WBS_T].[IX_IPM_WBS_T_EXTYEAR]))
                           |         |              |--Clustered Index Scan(OBJECT:([IPM_DEV].[dbo].[IPM_WBS_T].[PK_IPM_WBS_T]))
                           |         |--Table Spool
                           |              |--Clustered Index Scan(OBJECT:([IPM_DEV].[dbo].[IPM_WBS_T].[PK_IPM_WBS_T]), WHERE:(([IPM_WBS_T].[WBS_ID_EXTERNAL]>=1220000010000000000000000000 AND [IPM_WBS_T].[WBS_ID_EXTERNAL]<1220000020000000000000000000) AND (
                           |--Sort(ORDER BY:([IPM_WBS_T].[WBS_YEAR] ASC))
                                |--Hash Match(Inner Join, HASH:([IPMS_TRANSLATELEVEL_T].[LEVEL_TREE])=([IPM_WBS_T].[TREE_LEVEL]), RESIDUAL:([IPM_WBS_T].[TREE_LEVEL]=[IPMS_TRANSLATELEVEL_T].[LEVEL_TREE]))
                                     |--Clustered Index Scan(OBJECT:([IPM_DEV].[dbo].[IPMS_TRANSLATELEVEL_T].[PK_IPMS_TRANSLATELEVEL_T]))
                                     |--Merge Join(Inner Join, MERGE:([IPM_WBS_T].[WBS_ID], [IPM_WBS_T].[WBS_YEAR])=([IPM_WBS_T].[WBS_ID], [IPM_WBS_T].[WBS_YEAR]), RESIDUAL:([IPM_WBS_T].[WBS_ID]=[IPM_WBS_T].[WBS_ID] AND [IPM_WBS_T].[WBS_YEAR]=[IPM_WBS_T].[
                                          |--Clustered Index Scan(OBJECT:([IPM_DEV].[dbo].[IPM_WBS_T].[PK_IPM_WBS_T]), ORDERED FORWARD)
                                          |--Clustered Index Scan(OBJECT:([IPM_DEV].[dbo].[IPM_WBS_T].[PK_IPM_WBS_T]), ORDERED FORWARD)
13 окт 04, 13:45    [1029946]     Ответить | Цитировать Сообщить модератору
 Re: showplan_text again :)  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2676
Разбирать текст - от вершин дерева к корню.
Содержимое узлов - это операция, выполненная сервером в рамках плана.
Как разбирать ее - глазами, или написать программу разбора.
13 окт 04, 14:21    [1030139]     Ответить | Цитировать Сообщить модератору
 Re: showplan_text again :)  [new]
GoldDragon
Member

Откуда: Canada
Сообщений: 317
Makar4ik
Разбирать текст - от вершин дерева к корню.
Содержимое узлов - это операция, выполненная сервером в рамках плана.
Как разбирать ее - глазами, или написать программу разбора.


Тебе учителем не предлогали стать?
Ты многому бы мог их научить, но..... не тому, что надо :)

А я например всегда думал, что читать нужно снизу вверх, и справа налево.
Спасибо, дорогой, что объяснил мне, в чём я был неправ :)
13 окт 04, 14:26    [1030160]     Ответить | Цитировать Сообщить модератору
 Re: showplan_text again :)  [new]
Glory
Member

Откуда:
Сообщений: 104764
http://msdn.microsoft.com/library/en-us/optimsql/odp_tun_1_5pde.asp
13 окт 04, 14:35    [1030207]     Ответить | Цитировать Сообщить модератору
 Re: showplan_text again :)  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23903
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/qryanlzr/qryanlzr_1bad.asp
13 окт 04, 14:36    [1030215]     Ответить | Цитировать Сообщить модератору
 Re: showplan_text again :)  [new]
GoldDragon
Member

Откуда: Canada
Сообщений: 317
To Glory, tpg. Спасибо за link-и.

Но это не то, что я имел ввиду. Но это уже я сам виноват. Неправильно поставил вопрос.
Я имел ввиду, как понять где проблема и как её решить, чтобы оптимизировать sql?
Какие hint-ы стоит поставить, а какие только ухудшат всё дело?
13 окт 04, 14:45    [1030254]     Ответить | Цитировать Сообщить модератору
 Re: showplan_text again :)  [new]
Glory
Member

Откуда:
Сообщений: 104764
Я имел ввиду, как понять где проблема и как её решить, чтобы оптимизировать sql?
Ну так как раз прочитать по ссылке какая _физическая_ операция скрывается за каждым шагом плана. Посмотреть сколько % занимает этот шаг от всего плана.
13 окт 04, 14:47    [1030263]     Ответить | Цитировать Сообщить модератору
 Re: showplan_text again :)  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23903
Очень много сканов и Table Spool тоже нехороший момент. Глянь в графике план - какие операции имеют самые больше стоимости.
13 окт 04, 14:48    [1030268]     Ответить | Цитировать Сообщить модератору
 Re: showplan_text again :)  [new]
GoldDragon
Member

Откуда: Canada
Сообщений: 317
Я добавил OPTION (FORCE ORDER)

Если раньше, стоимость распределялось по разным операциям. В одном месте 10%, в другом 15% (к примеру, sort занимал - 15%), то теперь только 2 операции (оба HASH) занимают всё время, 1 HASH - 71%, другой - 27%.

Какой HINT я могу использовать, чтобы улучшить результат?

P.S. Кстати, добавление OPTION уменьшило выполнение с 29с до 23с
13 окт 04, 15:11    [1030367]     Ответить | Цитировать Сообщить модератору
 Re: showplan_text again :)  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23903
Бьюсь об заклад - вот в том месте, где идет Table Spool если применить использование или временной таблицы или табличной переменной, время выполнения ещё сильнее уменьшится...
13 окт 04, 15:15    [1030380]     Ответить | Цитировать Сообщить модератору
 Re: showplan_text again :)  [new]
GoldDragon
Member

Откуда: Canada
Сообщений: 317
Я не совсем понял, о чём ты говоришь, но вот то что получилось после добавления FORCE:

  |--Sort(ORDER BY:([IPM_WBS_T].[WBS_ID_EXTERNAL] ASC))
|--Compute Scalar(DEFINE:([Expr1036]=If ([IPM_WBS_T].[WBS_STATUS_ID]<3 AND [IPM_WBS_T].[TREE_LEVEL]<6) then NULL else [Expr1032], [Expr1037]=If ([IPM_WBS_T].[WBS_STATUS_ID]<3 AND [IPM_WBS_T].[TREE_LEVEL]<6) then NULL else [Expr1033]))
|--Merge Join(Inner Join, MERGE:([IPM_WBS_T].[WBS_ID], [IPM_WBS_T].[WBS_YEAR])=([IPM_WBS_T].[WBS_ID], [IPM_WBS_T].[WBS_YEAR]), RESIDUAL:([IPM_WBS_T].[WBS_ID]=[IPM_WBS_T].[WBS_ID] AND [IPM_WBS_T].[WBS_YEAR]=[IPM_WBS_T].[WBS_YEAR]))
|--Sort(ORDER BY:([IPM_WBS_T].[WBS_ID] ASC, [IPM_WBS_T].[WBS_YEAR] ASC))
| |--Hash Match(Aggregate, HASH:([IPM_WBS_T].[WBS_ID], [IPM_WBS_T].[WBS_YEAR]), RESIDUAL:([IPM_WBS_T].[WBS_ID]=[IPM_WBS_T].[WBS_ID] AND [IPM_WBS_T].[WBS_YEAR]=[IPM_WBS_T].[WBS_YEAR]) DEFINE:([Expr1030]=MIN([IPM_WBS_T].[UPDATING_DATE_S])
| |--Hash Match(Inner Join, HASH:([IPM_WBS_T].[WBS_YEAR])=([IPM_WBS_T].[WBS_YEAR]), RESIDUAL:(([IPM_WBS_T].[WBS_YEAR]=[IPM_WBS_T].[WBS_YEAR] AND [IPM_WBS_T].[WBS_ID_EXTERNAL]>=[IPM_WBS_T].[WBS_ID_EXTERNAL]) AND [IPM_WBS_T].[WBS_ID_
| |--Merge Join(Inner Join, MANY-TO-MANY MERGE:([IPM_WBS_T].[TREE_LEVEL])=([IPMS_TRANSLATELEVEL_T].[LEVEL_TREE]), RESIDUAL:([IPMS_TRANSLATELEVEL_T].[LEVEL_TREE]=[IPM_WBS_T].[TREE_LEVEL]))
| | |--Sort(ORDER BY:([IPM_WBS_T].[TREE_LEVEL] ASC))
| | | |--Clustered Index Scan(OBJECT:([IPM_DEV].[dbo].[IPM_WBS_T].[PK_IPM_WBS_T]))
| | |--Clustered Index Scan(OBJECT:([IPM_DEV].[dbo].[IPMS_TRANSLATELEVEL_T].[PK_IPMS_TRANSLATELEVEL_T]), ORDERED FORWARD)
| |--Nested Loops(Inner Join, WHERE[IPM_WBS_T].[WBS_ID_EXTERNAL]<[IPM_WBS_T].[WBS_ID_EXTERNAL]+[Expr1019] AND [IPM_WBS_T].[WBS_ID_EXTERNAL]>=[IPM_WBS_T].[WBS_ID_EXTERNAL]) OR [IPM_WBS_T].[TREE_LEVEL]=2) OR [IPM_WBS_T].[TRE
| |--Clustered Index Scan(OBJECT:([IPM_DEV].[dbo].[IPM_WBS_T].[PK_IPM_WBS_T]), WHERE:(([IPM_WBS_T].[WBS_ID_EXTERNAL]>=1220000010000000000000000000 AND [IPM_WBS_T].[WBS_ID_EXTERNAL]<1220000020000000000000000000) AND (([IPM
| |--Table Spool
| |--Compute Scalar(DEFINE:([Expr1019]=isnull([IPMS_TRANSLATELEVEL_T].[LEVEL_VALUE_MIN], 0)))
| |--Merge Join(Inner Join, MANY-TO-MANY MERGE:([IPM_WBS_T].[TREE_LEVEL])=([IPMS_TRANSLATELEVEL_T].[LEVEL_TREE]), RESIDUAL:([IPMS_TRANSLATELEVEL_T].[LEVEL_TREE]=[IPM_WBS_T].[TREE_LEVEL]))
| |--Sort(ORDER BY:([IPM_WBS_T].[TREE_LEVEL] ASC))
| | |--Hash Match(Left Semi Join, HASH:([IPM_WBS_T].[WBS_ID_EXTERNAL])=([Expr1056]), RESIDUAL:([IPM_WBS_T].[WBS_ID_EXTERNAL]=[Expr1056]))
| | |--Clustered Index Scan(OBJECT:([IPM_DEV].[dbo].[IPM_WBS_T].[PK_IPM_WBS_T]))
| | |--Compute Scalar(DEFINE:([Expr1056]=floor([IPM_WBS_T].[WBS_ID_EXTERNAL]/10000000000000000000)*10000000000000000000))
| | |--Hash Match(Left Semi Join, HASH:([IPM_WBS_T].[WBS_ID])=([IPM_WBS_T].[WBS_ID]), RESIDUAL:([IPM_WBS_T].[WBS_ID]=[IPM_WBS_T].[WBS_ID]))
| | |--Index Scan(OBJECT:([IPM_DEV].[dbo].[IPM_WBS_T].[IX_IPM_WBS_T_EXTYEAR]))
| | |--Filter(WHERE:([Expr1044] OR [Expr1045]))
| | |--Nested Loops(Left Semi Join, WHERE:([Expr1044])OUTER REFERENCES:([IPM_WBS_T].[OBS_ID_PERFORM]), DEFINE:([Expr1045] = [PROBE VALUE]))
| | |--Nested Loops(Left Semi Join, OUTER REFERENCES:([IPM_WBS_T].[OBS_ID_RESP]), DEFINE:([Expr1044] = [PROBE VALUE]))
| | | |--Clustered Index Scan(OBJECT:([IPM_DEV].[dbo].[IPM_WBS_T].[PK_IPM_WBS_T]), WHERE:(([IPM_WBS_T].[WBS_YEAR]=2005 OR ((2005>=datepart(year, [IPM_WBS_T].[BASE_DATE_S]) OR
| | | |--Row Count Spool
| | | |--Clustered Index Seek(OBJECT:([IPM_DEV].[dbo].[IPM_OBS_T].[PK_IPM_OBS_T]), SEEK:([IPM_OBS_T].[OBS_ID]=[IPM_WBS_T].[OBS_ID_RESP]), WHERE([IPM_OBS_T].[OBS_ID_E
| | |--Row Count Spool
| | |--Clustered Index Seek(OBJECT:([IPM_DEV].[dbo].[IPM_OBS_T].[PK_IPM_OBS_T]), SEEK:([IPM_OBS_T].[OBS_ID]=[IPM_WBS_T].[OBS_ID_PERFORM]), WHERE([IPM_OBS_T].[OBS_ID_EXT
| |--Nested Loops(Inner Join, OUTER REFERENCES:([IPMS_TRANSLATELEVEL_T].[LEVEL_TREE]))
| |--Nested Loops(Inner Join, OUTER REFERENCES:([IPMS_TRANSLATELEVEL_T].[LEVEL_TREE]))
| | |--Clustered Index Scan(OBJECT:([IPM_DEV].[dbo].[IPMS_TRANSLATELEVEL_T].[PK_IPMS_TRANSLATELEVEL_T]), ORDERED FORWARD)
| | |--Clustered Index Seek(OBJECT:([IPM_DEV].[dbo].[IPMS_TRANSLATELEVEL_T].[PK_IPMS_TRANSLATELEVEL_T]), SEEK:([IPMS_TRANSLATELEVEL_T].[LEVEL_TREE]=[IPMS_TRANSLATELEVEL_T].[LEVEL_TREE]) ORDERED FORW
| |--Clustered Index Seek(OBJECT:([IPM_DEV].[dbo].[IPMS_TRANSLATELEVEL_T].[PK_IPMS_TRANSLATELEVEL_T]), SEEK:([IPMS_TRANSLATELEVEL_T].[LEVEL_TREE]=[IPMS_TRANSLATELEVEL_T].[LEVEL_TREE]) ORDERED FORWARD)
|--Clustered Index Scan(OBJECT:([IPM_DEV].[dbo].[IPM_WBS_T].[PK_IPM_WBS_T]), ORDERED FORWARD)
13 окт 04, 15:23    [1030417]     Ответить | Цитировать Сообщить модератору
 Re: showplan_text again :)  [new]
GoldDragon
Member

Откуда: Canada
Сообщений: 317
Проблема в 2-х верхних HASH-ах
13 окт 04, 15:25    [1030426]     Ответить | Цитировать Сообщить модератору
 Re: showplan_text again :)  [new]
Glory
Member

Откуда:
Сообщений: 104764
Какой HINT я могу использовать, чтобы улучшить результат?
С чего вы решили что хинты вам вообще помогут ?
13 окт 04, 15:25    [1030429]     Ответить | Цитировать Сообщить модератору
 Re: showplan_text again :)  [new]
GoldDragon
Member

Откуда: Canada
Сообщений: 317
Хорошо, а что может помочь? Как сделать так, чтобы уменьшить количество scan-ов и убрать Table Spool?

Это у нас этот SQL работает 23с. У клиента с его БД это в 2-3 раза дольше, несмотря на то, что Server в несколько раз мощнее, чем у нас на фирме.
13 окт 04, 15:37    [1030491]     Ответить | Цитировать Сообщить модератору
 Re: showplan_text again :)  [new]
GoldDragon
Member

Откуда: Canada
Сообщений: 317
Кроме того, у нас есть Query, которое является SubQuery для других запросов. И там есть hint "HASH". Для одних запросов он уменьшает время выполнения с 6мин. до 20с., для других - наоборот увеличивает, с 10с. к примеру, до 40с.
Поэтому, мне бы хотелось знать, как с помощью SQL Analayzer я смогу узнать, в каких случаях и куда стоит ставить HINT-ы, а в каких случаях можно обойтись и без них.

Вот теперь вы знаете, зачем вообще я создал этот топик.
13 окт 04, 15:47    [1030535]     Ответить | Цитировать Сообщить модератору
 Re: showplan_text again :)  [new]
Glory
Member

Откуда:
Сообщений: 104764
Хорошо, а что может помочь? Как сделать так, чтобы уменьшить количество scan-ов и убрать Table Spool?
Поможет досканальный разбор всех операций плана и понимание сути каждой из них.
Hash, Merge и Nested loops - это ведь не просто слова.
Они получаются из наличия/отсутствия индексов, их селективности, количества записей в таблице, списка выбираемых столбцов, условий фильтрации, условий соединения и тд.

Table Spool возникает когда сервер решает сохранить какие-то результаты в промежуточную таблицу. Самый эффектный способ борьбы с ним - это разбиение запроса на несколько с сохранением результатов в такую же промежуточную таблицу. Но в этом случае вы уже сможете сами регулировать чего и сколько попадет в эту таблицу.
13 окт 04, 15:47    [1030538]     Ответить | Цитировать Сообщить модератору
 Re: showplan_text again :)  [new]
GoldDragon
Member

Откуда: Canada
Сообщений: 317
К сожалению, для меня это пока что только слова и ничего более. Поэтому я буду очень признателен, если кто-нибудь из вас сможет указать где я смогу прочитать об этом немного больше. И не просто объяснения, что это такое, а всякие примеры с планами, которые показали бы, как бороться с той или иной проблемой в написании SQL.
13 окт 04, 15:57    [1030588]     Ответить | Цитировать Сообщить модератору
 Re: showplan_text again :)  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23903
Можно попробовать сперва воспользоваться помощью ITW для определения и создания недостающих индексов.
14 окт 04, 08:47    [1032076]     Ответить | Цитировать Сообщить модератору
 Re: showplan_text again :)  [new]
GoldDragon
Member

Откуда: Canada
Сообщений: 317
Как я уже сказал выше, я новичок в этом деле. Да, я могу написать или прочитать SQL, но всё что касается еффективности, для меня это просто слова. Поэтому я несовсем понял, что это такое ITW и как с ним работать.
Я не прошу объяснять мне здесь, как с ним работать. Просто достаточно дать мне какие-нибудь линки на литературу (лучше на английском языке), где бы я мог доступным языком разобраться в написании эффективных SQL.
14 окт 04, 12:05    [1033113]     Ответить | Цитировать Сообщить модератору
 Re: showplan_text again :)  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23903
ITW - Index Tuning Wizard
14 окт 04, 12:13    [1033185]     Ответить | Цитировать Сообщить модератору
 Re: showplan_text again :)  [new]
GoldDragon
Member

Откуда: Canada
Сообщений: 317
Что это за Views такие построились во время работы ITW, которые начинаются на _hypmv_
14 окт 04, 12:58    [1033504]     Ответить | Цитировать Сообщить модератору
 Re: showplan_text again :)  [new]
Glory
Member

Откуда:
Сообщений: 104764
Просто достаточно дать мне какие-нибудь линки на литературу (лучше на английском языке), где бы я мог доступным языком разобраться в написании эффективных SQL.
Ken Henderson The Guru's Guide to Transact-SQL ... (оба варианта)
Joe Celko SQL for Smarties
14 окт 04, 13:31    [1033724]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить