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

Откуда:
Сообщений: 165
Прошу знатоков объяснить парадоксальный результат.
Дано: сервер MS SQL 2008; на нем две базы; в первой БД - таблица Т1 (30 млн.строк), в другой - Т2 (10 млн.строк) и есть Т3 - суть объединение всех сохраненных записей таблиц Т1 и Т2 (следовательно 40 млн. строк, которые "подчищены", "приведены к общему знаменателю" заранее и готовы к дальнейшей обработке); есть вьюха (выдает все записи Т1 и Т2 путем UNION ALL, при этом производит "на лету" те же простые преобразования над полями, приводя их к "общему знаменателю", аналогичному формированию Т3) и есть SELECT по Т3.
Пробуем: сравнить время исполнения вьюхи и селекта для а) подсчета количества строк через Count(*), б) исполнять другой надстроечный запрос над единой выборкой.
Результат: для обеих задач в среднем вьюха отрабатывает быстрее ~20%. Парадокс! По логике тупая выборка записей в таблице должна быть быстрее, чем выборка через вью да еще с накладными вычислениями.
Может это такая хитрая оптимизация сервера? Параллельное исполнение подзапросов вьюхи на сервере?
Прошу объяснить причину парадоксального результата.
11 июл 14, 06:21    [16289786]     Ответить | Цитировать Сообщить модератору
 Re: Неожиданный результат  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
показали бы хоть запросы
serg0265
По логике тупая выборка записей в таблице должна быть быстрее, чем выборка через вью да еще с накладными вычислениями.
по какой такой логике?
serg0265
Прошу объяснить причину парадоксального результата.
разные планы запросов
11 июл 14, 06:40    [16289791]     Ответить | Цитировать Сообщить модератору
 Re: Неожиданный результат  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31868
serg0265
Результат: для обеих задач в среднем вьюха отрабатывает быстрее ~20%. Парадокс! По логике тупая выборка записей в таблице должна быть быстрее, чем выборка через вью да еще с накладными вычислениями.
Это как минимум выюборки из разных таблиц. Может, там разная фрагментация, разная струкрута, ширина таблицы, индексы и т.п.
Вычисления могут ничего не значить. Как преобразование поля повлияет на Count(*)?

В общем, для начала сравните планы.
11 июл 14, 08:52    [16289911]     Ответить | Цитировать Сообщить модератору
 Re: Неожиданный результат  [new]
serg0265
Member

Откуда:
Сообщений: 165
Вью В1 на таблицах Т1 и Т2 элементарный, но достаточно объемный. Потому в аттаче. Выборка идет из копий Аксаптовских таблиц разных баз. Поэтому преобразования типов маловероятно, т.к. это одна платформа и одни и те же определения. План вью - проще некуда.
Селект еще элементарнее: SELECT * FROM T3 ;)
Вот они служат основой для первого теста: SELECT Count(*) FROM В1 и второго - SELECT Count(*) FROM T3.
Свежий замер подтвердил: 41 сек и 67 сек.

К сообщению приложен файл (UNION.zip - 76Kb) cкачать
11 июл 14, 10:11    [16290303]     Ответить | Цитировать Сообщить модератору
 Re: Неожиданный результат  [new]
serg0265
Member

Откуда:
Сообщений: 165
Причину кажется понял - индексы. Дело в том, что у Т1 есть поля с индексами, а у Т3 - нет.
11 июл 14, 13:22    [16291668]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить