Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Вопрос с Insert from select...  [new]
Алексей Кр
Member

Откуда: Белгород
Сообщений: 458
Заметил следующую ситуацию.
Выполняю простой select
Select pole1,
pole2,
...
pole3
from tables...

Выполняется примерно минуту... всё выбирает

Объявляю
declare @table table(перечисление колонок)


И затем выполняю:
insert into @table
Select pole1,
pole2,
...
pole3
from tables...

Происходит в разы медленнее (уже на текущий момент больше 8 минут идет)

Подскажите пожалуйста как выполнять insert с select'om наиболее быстрее ? чтоб вначале select был выполнен (как выше указал за минуту), а потом уже добавились данные в таблицу... иначе, как-то совсем печально (((
19 окт 12, 08:53    [13344280]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с Insert from select...  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
Я что удивительного - то ? Разные механизмы - разные времена, посморите нагрузку на темповую базу и блокировки.
Кроме того , ссылку на пруф не помню, но перфоманс с временными тблицами и табличными переменными разный для больших обьёмов , по крайней мере в 2005.
19 окт 12, 09:02    [13344307]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с Insert from select...  [new]
Алексей Кр
Member

Откуда: Белгород
Сообщений: 458
Подскажите пожалуйста тогда способ как "на лету" сохранить выборку? с последующей обработкой результатов...
19 окт 12, 09:04    [13344315]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с Insert from select...  [new]
antbr
Member

Откуда:
Сообщений: 75
Алексей Кр,
Попробуйте
Select
....
into #TempTable
19 окт 12, 09:19    [13344375]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с Insert from select...  [new]
Алексей Кр
Member

Откуда: Белгород
Сообщений: 458
Извиняюсь, можно поподробнее?
Ее #TempTable вначале нужно создать?
19 окт 12, 09:36    [13344473]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с Insert from select...  [new]
Алексей Кр
Member

Откуда: Белгород
Сообщений: 458
Алексей Кр
Извиняюсь, можно поподробнее?
Ее #TempTable вначале нужно создать?

вопрос данный снят... пробую...
19 окт 12, 09:39    [13344498]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с Insert from select...  [new]
Алексей Кр
Member

Откуда: Белгород
Сообщений: 458
С переменной #tempTable к сожалению не все столбцы выбирает, на определенном количество просто прерывается выполнение запроса к сожалению...
19 окт 12, 09:44    [13344521]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с Insert from select...  [new]
Spinifex
Member

Откуда:
Сообщений: 55
Common Table Expressions вам не подойдет?
19 окт 12, 10:07    [13344669]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с Insert from select...  [new]
Алексей Кр
Member

Откуда: Белгород
Сообщений: 458
Итого, мои результаты:
Обычный
select pole1, pole2, ..., poleN from tables... 
примерно проходит за 1-1,5 минуты
Подсчет идет по 630 значениям, то есть выходит 630 колонок...

Второй вариант:
create table @t(630 колонок)
insert into @t
select pole1, pole2, ..., poleN from tables...
select 21 колонка union all
(так 30 раз)select 21 колонка union all 

итого получаем матрицу 21 колонка на 30 строк...
21*30...
Проходит за 10-11 минут...

Кто сталкивался с большими выборками с большим количеством колонок?

Заранее благодарен!
19 окт 12, 10:07    [13344672]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с Insert from select...  [new]
Glory
Member

Откуда:
Сообщений: 104760
Алексей Кр
Кто сталкивался с большими выборками с большим количеством колонок?

Проблема не в выборке
Проблема в записи. Потому что табличные переменные хранятся в базе tempdb
19 окт 12, 10:11    [13344692]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с Insert from select...  [new]
Алексей Кр
Member

Откуда: Белгород
Сообщений: 458
И как решить проблему? Подскажите пожалуйста?
19 окт 12, 10:11    [13344698]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с Insert from select...  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Алексей Кр,

Вы неправильно пишете INSERT.
У целевой таблицы надо всегда перечислить все поля в правильном порядке
(совпадающем с порядком в списке SELECT).
19 окт 12, 10:13    [13344707]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с Insert from select...  [new]
Алексей Кр
Member

Откуда: Белгород
Сообщений: 458
сейчас попробую перечислить и выполнить...
19 окт 12, 10:13    [13344712]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с Insert from select...  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Алексей Кр,

может, расскажете, зачем такое жуткое количество данных надо сохранять в промежуточной временной таблице?
19 окт 12, 10:14    [13344714]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с Insert from select...  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
Алексей Кр,

create table @t(630 колонок)
У ваc база это одна таблица??
iap
У целевой таблицы надо всегда перечислить все поля в правильном порядке

19 окт 12, 10:17    [13344737]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с Insert from select...  [new]
Алексей Кр
Member

Откуда: Белгород
Сообщений: 458
нет, база большая...
в выборке идет подсчет статистики по критериям
select sum(case...where...) as 'a',
sum(case...where...) as 'b',
sum(case...where...) as 'c',
...
from tables join'ы....

Парадокс в том, что один проход выполняется на ура. А если делать N проходов то будет выполняться в N раз дольше, т.е.:

select {100 значении}
from tables join'ы.... итого 8 секунд
потом еще раз
select {100 значении}
from tables join'ы.... еще 8 секунд
потом еще раз
select {100 значении}
from tables join'ы.... еще 8 секунд

а если вышеуказанным способом

select {300 значении}
from tables join'ы.... это 8 секунд

так выгоднее же одним проходом всё пройти чем ац-ать раз гонять по таблицам...
19 окт 12, 10:22    [13344770]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с Insert from select...  [new]
Алексей Кр
Member

Откуда: Белгород
Сообщений: 458
iap
Алексей Кр,

Вы неправильно пишете INSERT.
У целевой таблицы надо всегда перечислить все поля в правильном порядке
(совпадающем с порядком в списке SELECT).


В общем перечислил, выполнил, итого 11 минут... разницы вообще не увидел, перечислять/не перечислять столбцы....
19 окт 12, 10:26    [13344798]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с Insert from select...  [new]
Алексей Кр
Member

Откуда: Белгород
Сообщений: 458
iap
Алексей Кр,
может, расскажете, зачем такое жуткое количество данных надо сохранять в промежуточной временной таблице?


Ответ уже был выше, чтобы сформировать "выходную" матрицу с данными
Алексей Кр
...
create table @t(630 колонок)
insert into @t
select pole1, pole2, ..., poleN from tables...
select 21 колонка from @t1 union all
(так 30 раз)select 21 колонка from @t1 union all 

итого получаем матрицу 21 колонка на 30 строк...
21*30...
Проходит за 10-11 минут...
...
19 окт 12, 10:28    [13344805]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с Insert from select...  [new]
Алексей Кр
Member

Откуда: Белгород
Сообщений: 458
конечно можете посоветовать pivot|unpivot но это будет жесть %)
19 окт 12, 10:34    [13344833]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с Insert from select...  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
Алексей Кр
create table @t(630 колонок)
insert into @t
select pole1, pole2, ..., poleN from tables...
select 21 колонка union all
(так 30 раз)select 21 колонка union all 

итого получаем матрицу 21 колонка на 30 строк...
21*30...
Проходит за 10-11 минут...


чего-то я не улавливаю. если select только 21 колонка, то зачем в create table 630 колонок?
19 окт 12, 10:47    [13344942]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с Insert from select...  [new]
Алексей Кр
Member

Откуда: Белгород
Сообщений: 458
чтоб получить 30 строк по 21 колонку объединенных с использованием union all
select pol1, pol2 from @t union all
select pol3, pol4 from @t union all и так далее
19 окт 12, 10:50    [13344977]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с Insert from select...  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
denis2710
Алексей Кр,

create table @t(630 колонок)
У ваc база это одна таблица??
iap
У целевой таблицы надо всегда перечислить все поля в правильном порядке

От количества полей этот принцип не зависит. Он абсолютен.
Алексей Кр
В общем перечислил, выполнил, итого 11 минут... разницы вообще не увидел, перечислять/не перечислять столбцы....
Перечислять надо не для скорости.
19 окт 12, 10:51    [13344984]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с Insert from select...  [new]
Алексей Кр
Member

Откуда: Белгород
Сообщений: 458
Значит других способов нету по сохранению данных?

Итого, подведем итоги:
1) Выбирать "порциями" (по 10 значении, по 100 значении и т.п.) время выборки увеличивается в N раз...
2) С использованием pivot|unpivot маловероятно и "жестоко"...
3) Выбрать одной строкой - на приемнике проблематично распознать... Но время выборки "1 единица".
4) Выбирать с временной таблицей @table, время выборки примерно в 8-10 раз дольше...
19 окт 12, 11:28    [13345288]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с Insert from select...  [new]
Glory
Member

Откуда:
Сообщений: 104760
Алексей Кр
Итого, подведем итоги:
1) Выбирать "порциями" (по 10 значении, по 100 значении и т.п.) время выборки увеличивается в N раз...
2) С использованием pivot|unpivot маловероятно и "жестоко"...
3) Выбрать одной строкой - на приемнике проблематично распознать... Но время выборки "1 единица".
4) Выбирать с временной таблицей @table, время выборки примерно в 8-10 раз дольше...

Чем, кроме времени выполнения, вы мониторили и анализировали происходящее не сервере ?
19 окт 12, 11:32    [13345327]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос с Insert from select...  [new]
Алексей Кр
Member

Откуда: Белгород
Сообщений: 458
К сожалению, больше ничем...
Только по времени ориентируюсь...
19 окт 12, 11:46    [13345419]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить