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

Откуда:
Сообщений: 316
Есть два отдельных запроса. Каждый для каждого из них приводится два плана выполнения:
1) без использования индексов уникальности
2) с использованием индексов уникальности

Прошу знающих оценить и сказать, как лучше.

+ Запрос №1
Картинка с другого сайта.

+ Запрос №2
Картинка с другого сайта.
28 июл 14, 17:08    [16367530]     Ответить | Цитировать Сообщить модератору
 Re: План выполнения запроса: какой лучше  [new]
gandjustas
Member

Откуда:
Сообщений: 857
Блог
_Novichok,

1) Запусти два запроса в одной сессии, SSMS тебе скажет у кого какой cost
2) Перед тем, как запускать сделай set statistcs io on
28 июл 14, 17:14    [16367553]     Ответить | Цитировать Сообщить модератору
 Re: План выполнения запроса: какой лучше  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
gandjustas
1) Запусти два запроса в одной сессии, SSMS тебе скажет у кого какой cost

ага и будет температура на Марсе :)
Профайлер + совет номер 2 из предидущего поста
28 июл 14, 17:32    [16367665]     Ответить | Цитировать Сообщить модератору
 Re: План выполнения запроса: какой лучше  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Вложенные циклы - плохо в любом случае. Попробуйте написать inline функцию.
28 июл 14, 17:39    [16367707]     Ответить | Цитировать Сообщить модератору
 Re: План выполнения запроса: какой лучше  [new]
gandjustas
Member

Откуда:
Сообщений: 857
Блог
Maxx
gandjustas
1) Запусти два запроса в одной сессии, SSMS тебе скажет у кого какой cost

ага и будет температура на Марсе :)
Профайлер + совет номер 2 из предидущего поста


Оу, TVF не увидел. Тогда нет смысла косты смотреть.
28 июл 14, 17:42    [16367717]     Ответить | Цитировать Сообщить модератору
 Re: План выполнения запроса: какой лучше  [new]
_Novichok
Member

Откуда:
Сообщений: 316
1) Без индексов: первый - 2%, второй 98%
с индексами: первый - 1%, второй 99%.

2) вот такие статистические данные
+ Запрос №1
с индексом без индекса
Query Profile Statistics
Number of INSERT DELETE and UPDATE statements 2 2
Rows affected by INSERT DELETE or UPDATE statements 72 72
Number of SELECT statements 1 1
Rows returned by SELECT statements1 1
Number of transactions 2 2
Network Statistics
Number of server roundtrips 3 3
TDS packets sent from client 3 3
TDS packets received from server 10 11
Bytes sent from client 11102 11102
Bytes received from server 30398 33130
Time Statistics
Client processing time 18 5
Total execution time 35 48
Wait time on server replies 17 43

+ Запрос №2
с индексом без индекса
Query Profile Statistics
Number of INSERT DELETE and UPDATE statements 2 2
Rows affected by INSERT DELETE or UPDATE statements 115 115
Number of SELECT statements 1 1
Rows returned by SELECT statements1 1
Number of transactions 2 2
Network Statistics
Number of server roundtrips 3 3
TDS packets sent from client 3 3
TDS packets received from server 9 10
Bytes sent from client 1032 1028
Bytes received from server 27288 28742
Time Statistics
Client processing time 4 4
Total execution time 204 185
Wait time on server replies 200 181

Какие можно сделать выводы?
28 июл 14, 18:05    [16367828]     Ответить | Цитировать Сообщить модератору
 Re: План выполнения запроса: какой лучше  [new]
_Novichok
Member

Откуда:
Сообщений: 316
Владислав Колосов
Вложенные циклы - плохо в любом случае. Попробуйте написать inline функцию.

в самих запросах циклов нету: UPDATE с использованием CTE
Циклы есть в CLR-функции, которая вызывается в запросе - она может и отдает
28 июл 14, 18:09    [16367851]     Ответить | Цитировать Сообщить модератору
 Re: План выполнения запроса: какой лучше  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4537
_Novichok
Какие можно сделать выводы?

Это разные запросы...
Если оба работают верно... выбрать наибыстрейший.
28 июл 14, 19:08    [16368119]     Ответить | Цитировать Сообщить модератору
 Re: План выполнения запроса: какой лучше  [new]
_Novichok
Member

Откуда:
Сообщений: 316
buser,

эти два запроса выполняют одну законченную операцию. но, если посмотреть на статистику, то получается, что с индексом первый работает быстрее, а второй медленее
28 июл 14, 20:30    [16368324]     Ответить | Цитировать Сообщить модератору
 Re: План выполнения запроса: какой лучше  [new]
invm
Member

Откуда: Москва
Сообщений: 9413
_Novichok
Прошу знающих оценить и сказать, как лучше.
Наличие уникального индекса позволило исключить сортировки в планах и на сканирование индекса потребуется меньше IO. Так что выигрыш есть. Плюс есть декларативный контроль уникальности значений в столбце.
28 июл 14, 20:52    [16368357]     Ответить | Цитировать Сообщить модератору
 Re: План выполнения запроса: какой лучше  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Владислав Колосов
Вложенные циклы - плохо в любом случае. Попробуйте написать inline функцию.


В одном случае NESTED LOOP в другом MERGE JOIN. грубая оценка такая
1) NESTED LOOP оптимальны для очень коротких табличек
2) MERGE JOIN для среднего объёма данных
3) HASH JOIN для большого объёма данных

Это грубо. В остальном запустите профайлер и сравните
28 июл 14, 20:59    [16368377]     Ответить | Цитировать Сообщить модератору
 Re: План выполнения запроса: какой лучше  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
CLR, теперь понятно. Везде INDEX SСAN, это не эффективно.
29 июл 14, 11:09    [16369923]     Ответить | Цитировать Сообщить модератору
 Re: План выполнения запроса: какой лучше  [new]
_Novichok
Member

Откуда:
Сообщений: 316
Владислав Колосов,

хм, насколько я знаю, индексное сканирование эффективнее табличного, или не так? или есть что-то еще, которое эффективнее индексного сканирования?
1 авг 14, 09:24    [16385476]     Ответить | Цитировать Сообщить модератору
 Re: План выполнения запроса: какой лучше  [new]
_Novichok
Member

Откуда:
Сообщений: 316
мда, еще есть IndexSeek...
1 авг 14, 10:09    [16385628]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить