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

Откуда:
Сообщений: 970
Сам вопрос: Есть ли существенная и если есть, то какая, разница между 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

Откуда:
Сообщений: 970
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

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

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

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

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

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

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

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

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

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

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

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

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