Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Временные таблицы. Как лучше создавать. Create Table ИЛИ select into?  [new]
_Промешан_
Member

Откуда:
Сообщений: 969
Сам вопрос: Есть ли существенная и если есть, то какая, разница между create table #t и select into #t с точки зрения процедур и выполенения их с клиента.

Откуда ноги: запуская одну и ту же процедуру из SSMS и с клиента (через SDAC) - скорость выполнения разнится раз в 50. В первом случае за 3 секунды, во втором - несколько минут.

решил подумать, что есть между ними разница. поменял select into на create table. F5. Запустил. Работают одинаково. Как будто "эврика". Хрен. Поменял обратно create table на select into. F5. Запустил. Тоже одинаково и без тормозов. Вывод: дело в компиляции. (об этом как бы второй вопрос - отчего такое может происходить). Ну и осталась идея, которая и оформилась в топик.

Спасибу :)
13 дек 12, 15:33    [13626491]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы. Как лучше создавать. Create Table ИЛИ select into?  [new]
_Промешан_
Member

Откуда:
Сообщений: 969
Microsoft SQL Server 2008 (SP3) - 10.0.5500.0 (X64) 
Sep 21 2011 22:45:45
Copyright (c) 1988-2008 Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.0 <X64> (Build 6002: Service Pack 2)
13 дек 12, 15:34    [13626494]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы. Как лучше создавать. Create Table ИЛИ select into?  [new]
Crimean
Member

Откуда:
Сообщений: 13148
планчики сравните. профайлером, например. и посмотрите во время выполнения - не ждут ли процессы чего.
13 дек 12, 15:58    [13626751]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы. Как лучше создавать. Create Table ИЛИ select into?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
_Промешан_
решил подумать, что есть между ними разница. поменял select into на create table
Так не одна процедура, а 2 разных, да ещё на 2-х разных базах?
Тогда конечно, план мог быть разный в кеше, и статистика могла, и данные.
13 дек 12, 16:34    [13627177]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы. Как лучше создавать. Create Table ИЛИ select into?  [new]
_Промешан_
Member

Откуда:
Сообщений: 969
Crimean
планчики сравните. профайлером, например. и посмотрите во время выполнения - не ждут ли процессы чего.

Какие планчики?
Сейчас то уже прецендент исчерпан, это если только в следующий раз, плюс процедура то и запрос один и тот же, но с клиента - неск минут, а из ссмс - 3 секунды.

alexeyvg
Так не одна процедура, а 2 разных, да ещё на 2-х разных базах?
Тогда конечно, план мог быть разный в кеше, и статистика могла, и данные.

А? Это вы с кем сейчас говорили и о чем?
14 дек 12, 13:46    [13631634]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы. Как лучше создавать. Create Table ИЛИ select into?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Сравните значения SETов в сессиях из студии и с клиента.
14 дек 12, 14:37    [13632128]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы. Как лучше создавать. Create Table ИЛИ select into?  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3618
_Промешан_
Сам вопрос: Есть ли существенная и если есть, то какая, разница между create table #t и select into #t с точки зрения процедур и выполенения их с клиента.

Откуда ноги: запуская одну и ту же процедуру из SSMS и с клиента (через SDAC) - скорость выполнения разнится раз в 50. В первом случае за 3 секунды, во втором - несколько минут.

решил подумать, что есть между ними разница. поменял select into на create table. F5. Запустил. Работают одинаково. Как будто "эврика". Хрен. Поменял обратно create table на select into. F5. Запустил. Тоже одинаково и без тормозов. Вывод: дело в компиляции. (об этом как бы второй вопрос - отчего такое может происходить). Ну и осталась идея, которая и оформилась в топик.

Спасибу :)

Разница есть:
"select into #t" блокирует системную таблицу на все время выполнения селекта, да так что паралельно ни один скрипт "create table #t " не сработает и будет ждать
14 дек 12, 16:23    [13633161]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы. Как лучше создавать. Create Table ИЛИ select into?  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3618
хотя похоже это уже в 2000 SP3 починили
14 дек 12, 16:25    [13633171]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы. Как лучше создавать. Create Table ИЛИ select into?  [new]
_Промешан_
Member

Откуда:
Сообщений: 969
pkarklin
Сравните значения SETов в сессиях из студии и с клиента.
Под SET ами имеете что в виду? установки на сессию или?

Разница есть:
"select into #t" блокирует системную таблицу на все время выполнения селекта, да так что паралельно ни один скрипт "create table #t " не сработает и будет ждать
У нас там везде хинт nolock стоит. Так что...
Да и все равно странно - клиент и студия выполняли точь в точь одинаковый запрос. Ну не может же чисто клиент накакать?
14 дек 12, 21:22    [13634909]     Ответить | Цитировать Сообщить модератору
 Re: Временные таблицы. Как лучше создавать. Create Table ИЛИ select into?  [new]
Crimean
Member

Откуда:
Сообщений: 13148
_Промешан_,

смешались в кучу... нолоки тут ни о чем. не там блокировка, где вы думаете. а там где она может быть - нолок не написать
еще раз - когда "долго" - не ждет ли процесс чего? смотрим в списке процессов + sp_lock вам в руки
и - планы выполнения пофайлером берем и сравниваем, "долго" с "быстро"
16 дек 12, 14:47    [13638672]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить