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

Откуда:
Сообщений: 1197
Есть такой скрипт с запросом и есть план по этому запросу в аттаче.
В данном плане сортировка занимает 24%. Как ее можно убрать?

Запрос упрощен по сравнению с рабочим, но сделан по аналогии. В рабочем запросе сортировка занимает 40%.

CREATE CLUSTERED INDEX [IX_Sales] ON [dbo].[Sales]
(
	[SaleDate] ASC,
	[Store] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO

CREATE UNIQUE CLUSTERED INDEX [IX_Stores] ON [dbo].[Stores]
(
	[Store] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO

create table #tmpArticuls2
(
  articul  varchar(50) collate SQL_Latin1_General_CP1_CI_AS
) 

select a.*, c.StoreName 
from sales a 
	join #tmpArticuls2 b 
	on a.articul = b.articul
	join Stores c 
	on a.store = c.store


К сообщению приложен файл (AvoidSort.sqlplan - 25Kb) cкачать
30 апр 15, 09:30    [17585002]     Ответить | Цитировать Сообщить модератору
 Re: избавиться от сортировки  [new]
iap
Member

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

а если индекс по #tmpArticuls2.articul сделать?
Сколько в этой таблице записей?
30 апр 15, 09:33    [17585013]     Ответить | Цитировать Сообщить модератору
 Re: избавиться от сортировки  [new]
Glory
Member

Откуда:
Сообщений: 104760
relief
Как ее можно убрать?

А вы видели критерий этой сортировки ? Список выходных полей ?
Какой из ваших индексов соответсвует им ?
30 апр 15, 09:35    [17585019]     Ответить | Цитировать Сообщить модератору
 Re: избавиться от сортировки  [new]
relief
Member

Откуда:
Сообщений: 1197
iap
relief,

а если индекс по #tmpArticuls2.articul сделать?
Сколько в этой таблице записей?


создал
create index ix_Articula on #tmpArticuls2(articul)


ничего не изменилось


в таблице #tmpArticuls2 100 тысяч
30 апр 15, 09:39    [17585040]     Ответить | Цитировать Сообщить модератору
 Re: избавиться от сортировки  [new]
relief
Member

Откуда:
Сообщений: 1197
Glory
relief
Как ее можно убрать?

А вы видели критерий этой сортировки ? Список выходных полей ?
Какой из ваших индексов соответсвует им ?


видел, что сортирует по Store для джойна с Stores

добавлял
create index ix_store on Sales (store)
sp_updatestats


думал поможет - сортировка осталась.
а что надо добавить?
30 апр 15, 09:44    [17585063]     Ответить | Цитировать Сообщить модератору
 Re: избавиться от сортировки  [new]
iap
Member

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

в [dbo].[Sales] нет индекса по [Store] для показанного запроса.
Либо по [SaleDate] тоже ограничивайте.

P.S. файл я, конечно, не качал и, соответственно, не читал.
30 апр 15, 09:44    [17585065]     Ответить | Цитировать Сообщить модератору
 Re: избавиться от сортировки  [new]
Glory
Member

Откуда:
Сообщений: 104760
relief
видел, что сортирует по Store для джойна с Stores

А вы видели, что я задал 2 вопроса про сортировку ?
30 апр 15, 09:45    [17585071]     Ответить | Цитировать Сообщить модератору
 Re: избавиться от сортировки  [new]
relief
Member

Откуда:
Сообщений: 1197
iap
relief,

в [dbo].[Sales] нет индекса по [Store] для показанного запроса.
Либо по [SaleDate] тоже ограничивайте.

P.S. файл я, конечно, не качал и, соответственно, не читал.



вы имеете ввиду?
create index ix_store on Sales (store)
sp_updatestats


не помогло
30 апр 15, 09:47    [17585084]     Ответить | Цитировать Сообщить модератору
 Re: избавиться от сортировки  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
relief
вы имеете ввиду?
create index ix_store on Sales (store)
sp_updatestats
Либо порядок полей в составном индексе поменять.
Либо оба поля составного поля в запросе использовать.

Раз не помогло, тогда не знаю...
30 апр 15, 09:50    [17585094]     Ответить | Цитировать Сообщить модератору
 Re: избавиться от сортировки  [new]
relief
Member

Откуда:
Сообщений: 1197
Glory
relief
видел, что сортирует по Store для джойна с Stores

А вы видели, что я задал 2 вопроса про сортировку ?


вы про выходные поля?

добавил такой индекс

CREATE NONCLUSTERED INDEX [ix_2] ON [dbo].[Sales]
(
	[Articul] ASC
)
INCLUDE ( 	[Store],
	[SaleDate],
	[Buyer])  


в плане теперь он используется, но сортировка осталась
30 апр 15, 09:51    [17585102]     Ответить | Цитировать Сообщить модератору
 Re: избавиться от сортировки  [new]
Glory
Member

Откуда:
Сообщений: 104760
relief
добавил такой индекс

CREATE NONCLUSTERED INDEX [ix_2] ON [dbo].[Sales]
(
	[Articul] ASC
)
INCLUDE ( 	[Store],
	[SaleDate],
	[Buyer])  

А почему [Articul] то попал в столбцы сортирвки то ?
30 апр 15, 09:54    [17585118]     Ответить | Цитировать Сообщить модератору
 Re: избавиться от сортировки  [new]
relief
Member

Откуда:
Сообщений: 1197
Glory
relief
добавил такой индекс

CREATE NONCLUSTERED INDEX [ix_2] ON [dbo].[Sales]
(
	[Articul] ASC
)
INCLUDE ( 	[Store],
	[SaleDate],
	[Buyer])  

А почему [Articul] то попал в столбцы сортирвки то ?


добавил и сортировка ушла.

CREATE NONCLUSTERED drop INDEX [ix_3] ON [dbo].[Sales]
(
	[Store] ASC
)
INCLUDE ( 	[Articul],
	[SaleDate],
	[Buyer])  


а вот если запрос поменять на

select a.*, c.StoreName 
from sales a 
	join #tmpArticuls2 b 
	on a.articul = b.articul
	[b]left [/b]join Stores c 
	on a.store = c.store


то сортировка опять появляется. а как здесь от нее избавиться?
30 апр 15, 10:06    [17585205]     Ответить | Цитировать Сообщить модератору
 Re: избавиться от сортировки  [new]
Glory
Member

Откуда:
Сообщений: 104760
relief
то сортировка опять появляется. а как здесь от нее избавиться?

Вторая итерация цикла 17585019
30 апр 15, 10:07    [17585220]     Ответить | Цитировать Сообщить модератору
 Re: избавиться от сортировки  [new]
relief
Member

Откуда:
Сообщений: 1197
Glory
relief
то сортировка опять появляется. а как здесь от нее избавиться?

Вторая итерация цикла 17585019



список выходных полей
articul, store, saledate, buyer

сортировка по store

все индексы, что создал в процессе теста не трогал, после каждого создания индекса запускал sp_updatestats
30 апр 15, 10:16    [17585275]     Ответить | Цитировать Сообщить модератору
 Re: избавиться от сортировки  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
relief, сервер решил, что сортировать и выполнять слияние дешевле, чем вычислять хэш. Вполне возможно, что так оно и есть.
30 апр 15, 11:41    [17586031]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить