Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 WITH TableName AS (Select ....) or temp table  [new]
sqladm
Member

Откуда:
Сообщений: 9
Mожете объяснить почему blok2 работает более быстрее, чем blok1 что является основным отличием.
заранее спасибо.

blok1
WITH t1 AS (
select col1,col2,col3
from dtstable e left join @dtable d on d.col1=e.col1
)
, t2 AS (
select c1,c2,c3
from @dftable a join @sftable s on a.c1=s.c1 
)


insert into @fintable
select *
from t1 
inner join t2 on t1.col1=t2.c1



blok 2
select col1,col2,col3  into #tempt1
from dtstable e left join @dtable d on d.col1=e.col1


select c1,c2,c3 into #tempt2
from @dftable a join @sftable s on a.c1=s.c1 


insert into @fintable
select *
from #tempt1 
inner join #tempt2 on t1.col1=t2.c1
5 сен 12, 11:39    [13116273]     Ответить | Цитировать Сообщить модератору
 Re: WITH TableName AS (Select ....) or temp table  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
sqladm,
А планы выполнения запроса о чем вам говорят?
5 сен 12, 11:43    [13116314]     Ответить | Цитировать Сообщить модератору
 Re: WITH TableName AS (Select ....) or temp table  [new]
sqladm
Member

Откуда:
Сообщений: 9
конечно на blok2 некоторые шаги больше чем на blok1
5 сен 12, 11:54    [13116440]     Ответить | Цитировать Сообщить модератору
 Re: WITH TableName AS (Select ....) or temp table  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Вот так лучше:
INSERT @fintable(col1,col2,col3,c1,c2,c3)
SELECT e.col1,e.col2,e.col3,a.c1,a.c2,a.c3
FROM dtstable e
LEFT JOIN @dtable d ON e.col1=d.col1
     JOIN @dftable a ON e.col1=a.c1
     JOIN @sftable s ON e.col1=s.c1;
Остаётся непонятным, зачем там @dtable?
Чтобы при случае записи размножать что ли?
Почему бы Вам не писать алиасы таблиц у всех полей запроса?
5 сен 12, 11:56    [13116468]     Ответить | Цитировать Сообщить модератору
 Re: WITH TableName AS (Select ....) or temp table  [new]
sqladm
Member

Откуда:
Сообщений: 9
спасибо за ответы.
но мой главный вопрос в том,
что является основным отличием между WITH table_name as (select) и temp table (#table_name)?
5 сен 12, 12:02    [13116531]     Ответить | Цитировать Сообщить модератору
 Re: WITH TableName AS (Select ....) or temp table  [new]
Glory
Member

Откуда:
Сообщений: 104751
sqladm
что является основным отличием между WITH table_name as (select) и temp table (#table_name)?

WITH table_name - это только синтаксис
Т.е. вы срашиваете, чем select отличается от #table_name
Да всем он отличается
5 сен 12, 12:07    [13116595]     Ответить | Цитировать Сообщить модератору
 Re: WITH TableName AS (Select ....) or temp table  [new]
sqladm
Member

Откуда:
Сообщений: 9
когда я использую

WITH t1 AS (
select col1,col2,col3
from dtstable e left join @dtable d on d.col1=e.col1
) это создает временную таблицу t1

и в этом случае создает временную таблицу #tempt1
select col1,col2,col3 into #tempt1
from dtstable e left join @dtable d on d.col1=e.col1
Я прав?

но select into #temptable работает более быстрее
5 сен 12, 12:13    [13116639]     Ответить | Цитировать Сообщить модератору
 Re: WITH TableName AS (Select ....) or temp table  [new]
Glory
Member

Откуда:
Сообщений: 104751
sqladm
когда я использую

WITH t1 AS (
select col1,col2,col3
from dtstable e left join @dtable d on d.col1=e.col1
) это создает временную таблицу t1

Вы не правы
Этот запрос аналогичен
select * from (
select col1,col2,col3
from dtstable e left join @dtable d on d.col1=e.col1
) as t1
5 сен 12, 12:15    [13116662]     Ответить | Цитировать Сообщить модератору
 Re: WITH TableName AS (Select ....) or temp table  [new]
sqladm
Member

Откуда:
Сообщений: 9
так
WITH t1 AS (
select col1,col2,col3
from dtstable e left join @dtable d on d.col1=e.col1
)
в этом случае не создает временную таблицу?
это только синтаксис?
5 сен 12, 12:19    [13116716]     Ответить | Цитировать Сообщить модератору
 Re: WITH TableName AS (Select ....) or temp table  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
sqladm
так
WITH t1 AS (
select col1,col2,col3
from dtstable e left join @dtable d on d.col1=e.col1
)
в этом случае не создает временную таблицу?
это только синтаксис?


вам уже несколько раз ответили, что нет...что это синтаксический сахар
5 сен 12, 12:34    [13116857]     Ответить | Цитировать Сообщить модератору
 Re: WITH TableName AS (Select ....) or temp table  [new]
sqladm
Member

Откуда:
Сообщений: 9
Большое спасибо всех
5 сен 12, 12:38    [13116890]     Ответить | Цитировать Сообщить модератору
 Re: WITH TableName AS (Select ....) or temp table  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
sqladm
Mожете объяснить почему blok2 работает более быстрее, чем blok1 что является основным отличием.
заранее спасибо.
Второй вариант быстрее, потому что там в главном запросе не используются табличные переменные, которые могут оказаться весьма приличным тормозом ввиду отсутствия статистики.
5 сен 12, 20:24    [13120437]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить