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

Откуда:
Сообщений: 216
Здравствуйте!

Есть проблемма с запросом:
Идет выборка из нескольких представлений и ранее сформированной временной таблицы. Результатом выполнения должна стать выборка из порядка 200-300 тысяч записей.
Проблемма возникает в следующем - если в Select перечислить нужные поля (неважно - из одного источника или из всех таблиц, учавствующих в запросе), то запрос такое впечатление, что зависает - полная загрузка процессора и съедается все пространство на диске, ждали долго - несколько часов, запрос продолжал выполняться. Если же в Select указать *, то запрос спокойно выполняется в течении пары минут (нормальное ожидаемое время выполнения).

Планы пока указать не могу, как только будет возможность, выложу. SQL 2008.
6 ноя 09, 11:58    [7890626]     Ответить | Цитировать Сообщить модератору
 Re: Select * и Select [перечисление полей] - выполняются по-разному  [new]
Glory
Member

Откуда:
Сообщений: 104760
Нет ничего удивительного в том, что разные запросы сервер пытается выполнять по-разному
6 ноя 09, 12:05    [7890686]     Ответить | Цитировать Сообщить модератору
 Re: Select * и Select [перечисление полей] - выполняются по-разному  [new]
Alkatraz
Member

Откуда:
Сообщений: 216
Я сейчас задам глупый вопрос - а почему такая разница выполнения двух запросов, если разница только в выбираемых полях? :)

Вот план выполнения запроса с перечислением полей (План.sqlplan) и без (План 1.sqlplan).

К сообщению приложен файл (Temp.rar - 15Kb) cкачать
6 ноя 09, 12:42    [7891049]     Ответить | Цитировать Сообщить модератору
 Re: Select * и Select [перечисление полей] - выполняются по-разному  [new]
Glory
Member

Откуда:
Сообщений: 104760
Alkatraz
Я сейчас задам глупый вопрос - а почему такая разница выполнения двух запросов, если разница только в выбираемых полях? :)

Еще раз. Для сервера - это разные запросы. Поэтому и разные планы выполнения. То, что вам кажется несущественным, для сервера имеет большое значение. Потому что список полей определяет, какие данные из каких таблиц нужны, а какие не нужны в запросе

Есть встречный вопрос - зачем клиету "выборка из порядка 200-300 тысяч записей." ? Он их будет листать на экране ?
6 ноя 09, 12:48    [7891103]     Ответить | Цитировать Сообщить модератору
 Re: Select * и Select [перечисление полей] - выполняются по-разному  [new]
Влом регистрироваться
Guest
Alkatraz,

вопрос глупый только потому, что ответ на него есть в любой книге по MSSQL.

Когда вы пишите *, у вас сканируется вся таблица или кластерный индекс, когда указываете отдельные поля, то появляется еще больше вариантов - выбрать значения через индекс, который построен на этих полях, выбрать значения одного из полей из индекса по этому полю, а дальше сделать lookup для других полей, просканировать кластерный индекс и т.д.
6 ноя 09, 12:54    [7891174]     Ответить | Цитировать Сообщить модератору
 Re: Select * и Select [перечисление полей] - выполняются по-разному  [new]
Alkatraz
Member

Откуда:
Сообщений: 216
Glory, я понял, что был неправ, спасибо. А на счет запроса - это один из шагов скрипта.

Я понял, куда копать, спасибо за разъяснения.
6 ноя 09, 12:59    [7891234]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить