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

Откуда:
Сообщений: 282
Все доброго времени суток. Кто может поделиться мыслями по поводу того, как избавиться от двух ORDER BY в одном запросе на вставку из одной таблицу в другую (структуры таблиц идентичны). Первая сортировка происходит во время DISTINCT, вторая - перед вставкой в целевую таблицу, так как она содержит кластеризованный индекс по полям FROM, TO, col1. Прикладываю примерный вид и план запроса

insert into T_OUT 
	(col0, FROM, TO, col1, col2, col3, col11, col21, col31, col12, col22, col32)
select distinct col0, convert(datetime, 'Mar  3 2015  1:12:07:583PM', 109),  convert(datetime, 'Jan  1 5999 12:00:00:000AM', 109),  
	col1, col2, col3, col11, col21, col31, col12, col22, col32
from T_IN src 
where src.col22 in ('I', 'U');


К сообщению приложен файл. Размер - 9Kb
3 мар 15, 14:21    [17337365]     Ответить | Цитировать Сообщить модератору
 Re: Две сортировки при вставке  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
insert into T_OUT 
	( FROM, TO, col1, col2, col3, col11, col21, col31, col12, col22, col32, col0)
select distinct convert(datetime, 'Mar  3 2015  1:12:07:583PM', 109),  convert(datetime, 'Jan  1 5999 12:00:00:000AM', 109),  
	col1, col2, col3, col11, col21, col31, col12, col22, col32, col0
from T_IN src 
where src.col22 in ('I', 'U');


?
3 мар 15, 14:26    [17337399]     Ответить | Цитировать Сообщить модератору
 Re: Две сортировки при вставке  [new]
Glory
Member

Откуда:
Сообщений: 104760
baza906
Первая сортировка происходит во время DISTINCT

А как бы вы фильтровали повторяющиеся записи без сортировки ?

baza906
вторая - перед вставкой в целевую таблицу

И что же там сортируется ? Вы думаете по картинке это видно ?
3 мар 15, 14:36    [17337470]     Ответить | Цитировать Сообщить модератору
 Re: Две сортировки при вставке  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
baza906,

для distinct можно попробовать

option(hash group)

если уникальных значений мало
3 мар 15, 14:49    [17337590]     Ответить | Цитировать Сообщить модератору
 Re: Две сортировки при вставке  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Glory
baza906
Первая сортировка происходит во время DISTINCT

А как бы вы фильтровали повторяющиеся записи без сортировки ?

SELECT * FROM 
(
SELECT ...,
RN = ROW_NUMBER() OVER (ORDER BY ...)
) T 
WHERE RN = 1
3 мар 15, 15:05    [17337714]     Ответить | Цитировать Сообщить модератору
 Re: Две сортировки при вставке  [new]
Glory
Member

Откуда:
Сообщений: 104760
a_voronin
Glory
пропущено...

А как бы вы фильтровали повторяющиеся записи без сортировки ?

SELECT * FROM 
(
SELECT ...,
RN = ROW_NUMBER() OVER (ORDER BY ...)
) T 
WHERE RN = 1

И что, тут нет сортировки ?
3 мар 15, 15:08    [17337737]     Ответить | Цитировать Сообщить модератору
 Re: Две сортировки при вставке  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
baza906,

В T_OUT кластерный первичный ключ типа uniqueidentifier с дефолтом по newid()?
3 мар 15, 15:18    [17337810]     Ответить | Цитировать Сообщить модератору
 Re: Две сортировки при вставке  [new]
baza906
Member

Откуда:
Сообщений: 282
invm, нет, составной из 3 указанных плей
3 мар 15, 15:29    [17337896]     Ответить | Цитировать Сообщить модератору
 Re: Две сортировки при вставке  [new]
baza906
Member

Откуда:
Сообщений: 282
Glory, как я понимаю, перед вставку в табл. с кластеризованным индексом всегда происходит сортировка. По всем включенным в него полям
3 мар 15, 15:41    [17337976]     Ответить | Цитировать Сообщить модератору
 Re: Две сортировки при вставке  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
baza906
invm, нет, составной из 3 указанных плей
Странно. Оптимизатору обычно хватает ума делать первую сортировку с нужным порядком столбцов, чтобы исключить вторую.
Покажите актуальный план в формате sqlplan.
3 мар 15, 15:43    [17337998]     Ответить | Цитировать Сообщить модератору
 Re: Две сортировки при вставке  [new]
Glory
Member

Откуда:
Сообщений: 104760
baza906
Glory, как я понимаю, перед вставку в табл. с кластеризованным индексом всегда происходит сортировка. По всем включенным в него полям

Откуда вы это понимаете, если даже не знаете, что в вашей иконке Sort указано ?
3 мар 15, 15:47    [17338021]     Ответить | Цитировать Сообщить модератору
 Re: Две сортировки при вставке  [new]
baza906
Member

Откуда:
Сообщений: 282
Glory, есть другие варианты?
3 мар 15, 15:54    [17338069]     Ответить | Цитировать Сообщить модератору
 Re: Две сортировки при вставке  [new]
baza906
Member

Откуда:
Сообщений: 282
invm,

К сообщению приложен файл (two_sort.rar - 14Kb) cкачать
3 мар 15, 16:02    [17338131]     Ответить | Цитировать Сообщить модератору
 Re: Две сортировки при вставке  [new]
Glory
Member

Откуда:
Сообщений: 104760
baza906
Glory, есть другие варианты?

С такими вопросами вам к Чумаку надо. Он умеет лечить по фотографиям
3 мар 15, 16:04    [17338147]     Ответить | Цитировать Сообщить модератору
 Re: Две сортировки при вставке  [new]
baza906
Member

Откуда:
Сообщений: 282
Glory, разве перед вставкой в кластеризованный индекс может отсутствовать предварительная сортировка?
3 мар 15, 16:10    [17338197]     Ответить | Цитировать Сообщить модератору
 Re: Две сортировки при вставке  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31439
baza906,
Первое решение не помогло? Может, выложите его план?
3 мар 15, 16:15    [17338237]     Ответить | Цитировать Сообщить модератору
 Re: Две сортировки при вставке  [new]
Glory
Member

Откуда:
Сообщений: 104760
baza906
Glory, разве перед вставкой в кластеризованный индекс может отсутствовать предварительная сортировка?

Зачем серверу сортировать что-то перед вставкой для соблюдения какого-то _одного из индексов_ в целевой таблице ?
3 мар 15, 16:23    [17338289]     Ответить | Цитировать Сообщить модератору
 Re: Две сортировки при вставке  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20600
Glory
Зачем серверу сортировать что-то перед вставкой для соблюдения какого-то _одного из индексов_ в целевой таблице ?
Сортировка в памяти и последующая последовательная вставка по мнению сервера дешевле вставки несортированного набора. Наверное, он таки прав.
3 мар 15, 16:28    [17338324]     Ответить | Цитировать Сообщить модератору
 Re: Две сортировки при вставке  [new]
Glory
Member

Откуда:
Сообщений: 104760
Akina
Glory
Зачем серверу сортировать что-то перед вставкой для соблюдения какого-то _одного из индексов_ в целевой таблице ?
Сортировка в памяти и последующая последовательная вставка по мнению сервера дешевле вставки несортированного набора. Наверное, он таки прав.

Вы это тоже по иконке Sort установили ?
3 мар 15, 16:32    [17338344]     Ответить | Цитировать Сообщить модератору
 Re: Две сортировки при вставке  [new]
baza906
Member

Откуда:
Сообщений: 282
alexeyvg, решение Гавриленко Сергея не помогло, план не изменился. Высылал его чуть выше, пользователю Invim
3 мар 15, 16:35    [17338360]     Ответить | Цитировать Сообщить модератору
 Re: Две сортировки при вставке  [new]
baza906
Member

Откуда:
Сообщений: 282
Glory, чтобы строки физически хранились в соответствии с заданным индексом.
3 мар 15, 16:46    [17338451]     Ответить | Цитировать Сообщить модератору
 Re: Две сортировки при вставке  [new]
baza906
Member

Откуда:
Сообщений: 282
Гавриленко Сергей Алексеевич, нет, не помогло. к сожалению
3 мар 15, 16:53    [17338529]     Ответить | Цитировать Сообщить модератору
 Re: Две сортировки при вставке  [new]
Glory
Member

Откуда:
Сообщений: 104760
baza906
Glory, чтобы строки физически хранились в соответствии с заданным индексом.

А без предварительной сортировки они не будут что ли храниться "в соответствии с заданным индексом" ?
И что с другими индексами будет ?
Может вы уже посмотрите на свойства этого шага в плане ?
3 мар 15, 16:56    [17338554]     Ответить | Цитировать Сообщить модератору
 Re: Две сортировки при вставке  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20600
Glory
Вы это тоже по иконке Sort установили ?
Вот только не надо...
Если нет сортировки выходного набора перед вставкой - будет иметь место рандомная вставка. Грубо - для каждой записи с нуля ищи место, куда вставлять.
Если есть - выполняется последовательная вставка. Т.е. место для вставки можно искать, начиная с места последней вставки.

А как уж там на самом деле сервер это делает - я лично ХЗ. Но иконка второй сортировки в плане не от фонаря ж нарисовалась.
3 мар 15, 17:02    [17338600]     Ответить | Цитировать Сообщить модератору
 Re: Две сортировки при вставке  [new]
Glory
Member

Откуда:
Сообщений: 104760
Akina
Вот только не надо...

Вот чего точно не надо, так это додумывать то, что вы не видели в плане
3 мар 15, 17:03    [17338613]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить