powered by simpleCommunicator - 2.0.28     © 2024 Programmizd 02
Map
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как бурать дубликаты?
10 сообщений из 10, страница 1 из 1
Как бурать дубликаты?
    #40134771
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще тут вопрос вохник:

Есть таблица, надо сделать выборку без дубликатов, если повторяется - брать только ту запись, у которой
значение [created] - самое свежее.

Ключ: name, size, cat

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
declare @products TABLE (
[name] nvarchar(50),
[size] smallint,
[cat] nvarchar(50),
[cond] nvarchar(50),
[created] datetime
);

insert into @Products(name, size, cat, cond, [created]) values(N'Product1', 20,  N'Phone1', N'OK',		'2022-01-22 08:00');
insert into @Products(name, size, cat, cond, [created]) values(N'Product1', 20,  N'Phone1', N'OK',	'2022-01-12 05:00');
insert into @Products(name, size, cat, cond, [created]) values(N'Product1', 20,  N'Phone1', N'OK',	'2022-01-05 05:00');
insert into @Products(name, size, cat, cond, [created]) values(N'Product2', 400, N'Note2', N'OKOK',	'2022-01-20 07:00');
insert into @Products(name, size, cat, cond, [created]) values(N'Product3', 255, N'Note', N'OK',		'2022-01-22 11:00');
insert into @Products(name, size, cat, cond, [created]) values(N'Product4', 385, N'Note', N'OK',		'2022-01-21 11:00');
insert into @Products(name, size, cat, cond, [created]) values(N'Product5', 420, N'Note', N'SOSO',		'2022-01-21 14:00');
insert into @Products(name, size, cat, cond, [created]) values(N'Product5', 420, N'Note', N'OK',		'2022-01-05 13:00');
insert into @Products(name, size, cat, cond, [created]) values(N'Product10', 8800, N'No', N'OK',		'2022-01-08 11:00');




Мой вариант:
Код: sql
1.
2.
3.
4.
5.
6.
;WITH CTE(ProductName,Size,Category,Condition,LoadDatetime,duptotal)
AS (SELECT	ProductName,Size,Category,Condition,LoadDatetime,
			ROW_NUMBER() OVER(PARTITION BY ProductName,Size,Category ORDER BY ProductName) AS duptotal
    FROM [dbo].[Products])
SELECT * FROM CTE
where duptotal=1;



Какие еще возможны запросы?
...
Рейтинг: 0 / 0
Как бурать дубликаты?
    #40134776
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

можно изменить систему хранения, исторические данных держать отдельно или использовать темпоральные таблицы. В этом случае сортировка не потребуется.
...
Рейтинг: 0 / 0
Как бурать дубликаты?
    #40134778
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

Код: sql
1.
2.
3.
4.
select top(1) with ties
     [name], [size], [cat], [cond], [created]
from @Products
order by row_number() over (partition by [name], [size], [cat] order by [created] desc);



мой вариант лаконичнее в плане кода, но должен быть несколько медленней в плане производительности из-за еще одного оператора сортировки в плане.
...
Рейтинг: 0 / 0
Как бурать дубликаты?
    #40134789
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff
Ролг Хупин,

Код: sql
1.
2.
3.
4.
select top(1) with ties
     [name], [size], [cat], [cond], [created]
from @Products
order by row_number() over (partition by [name], [size], [cat] order by [created] desc);



мой вариант лаконичнее в плане кода, но должен быть несколько медленней в плане производительности из-за еще одного оператора сортировки в плане.


А в моем варианте тоже сортировака есть или там CTE дает выигрыш?


Я еще один вариант сделал:

Код: sql
1.
2.
3.
4.
5.
SELECT * from
(
	SELECT *, RANK() OVER(PARTITION BY name, [size], [cat] ORDER BY [created] desc) as rank
	FROM @Products) t2
where t2.rank=1;
...
Рейтинг: 0 / 0
Как бурать дубликаты?
    #40134792
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

есть но только одна, из-за row_number() over ( order by )

в моем же случае помимо сортировки внутри окна, должна быть сортировка по row_number() desc

сортировки вашего кода можно избежать если будет индекс
Код: sql
1.
2.
3.
4.
5.
6.
7.
declare @products table (
[name] nvarchar(50),
[size] smallint,
[cat] nvarchar(50),
[cond] nvarchar(50),
[created] datetime,
index ix ([name], [size], [cat], [created] desc, [cond])
...
Рейтинг: 0 / 0
Как бурать дубликаты?
    #40134801
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff
Ролг Хупин,

есть но только одна, из-за row_number() over ( order by )

в моем же случае помимо сортировки внутри окна, должна быть сортировка по row_number() desc

сортировки вашего кода можно избежать если будет индекс
Код: sql
1.
2.
3.
4.
5.
6.
7.
declare @products table (
[name] nvarchar(50),
[size] smallint,
[cat] nvarchar(50),
[cond] nvarchar(50),
[created] datetime,
index ix ([name], [size], [cat], [created] desc, [cond])



Индекса нет, ну, вот нет .

Кстати, если здесь нужна сортировка по имени:
Код: sql
1.
2.
3.
4.
select top(1) with ties
[name], [size], [cat], [cond], [created]
from @Products
order by row_number() over (partition by [name], [size], [cat] order by [created] desc);



тогда нужно еще один запрос накрутить типа такого?

Код: sql
1.
2.
3.
4.
5.
6.
select [name], [size], [cat], [cond], [created] from
(select top(1) with ties
     [name], [size], [cat], [cond], [created]
from @Products
order by row_number() over (partition by [name], [size], [cat] order by [created] desc))
t order by [name]; 
...
Рейтинг: 0 / 0
Как бурать дубликаты?
    #40134804
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин


тогда нужно еще один запрос накрутить типа такого?

Код: sql
1.
2.
3.
4.
5.
6.
select [name], [size], [cat], [cond], [created] from
(select top(1) with ties
     [name], [size], [cat], [cond], [created]
from @Products
order by row_number() over (partition by [name], [size], [cat] order by [created] desc))
t order by [name]; 



да.

ваш изначальный запрос вполне оптимальный для данной постановки задачи, чем он вас не устраивает?
...
Рейтинг: 0 / 0
Как бурать дубликаты?
    #40134819
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff
Ролг Хупин


тогда нужно еще один запрос накрутить типа такого?

Код: sql
1.
2.
3.
4.
5.
6.
select [name], [size], [cat], [cond], [created] from
(select top(1) with ties
     [name], [size], [cat], [cond], [created]
from @Products
order by row_number() over (partition by [name], [size], [cat] order by [created] desc))
t order by [name]; 



да.

ваш изначальный запрос вполне оптимальный для данной постановки задачи, чем он вас не устраивает?


Извечная тяга к прекрасному
Просто, хотел понять, какие варианты есть. Спасибо!
...
Рейтинг: 0 / 0
Как бурать дубликаты?
    #40134888
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
felix_ff
Ролг Хупин,

Код: sql
1.
2.
3.
4.
select top(1) with ties
     [name], [size], [cat], [cond], [created]
from @Products
order by row_number() over (partition by [name], [size], [cat] order by [created] desc);



мой вариант лаконичнее в плане кода, но должен быть несколько медленней в плане производительности из-за еще одного оператора сортировки в плане.

К сожалению, он может быть СИЛЬНО хуже по производительности, если таким образом оформляется подзапрос, с результатами которого потом связываются какие-нибудь внешние таблицы и т.д.
Оптимизатор оценивает количество возвращаемых записей из такого подзапроса =1, и соответственно, внешние таблицы связывает с ним через NL.
Вариант, когда N=row_number() over (partition by [name], [size], [cat] order by [created] desc) рассчитывается явно, и во Where явно фигурирует N=1 - таким недостатком не обладает, и соединение производится правильно, в зависимости от количества записей в выборке подзапроса.
...
Рейтинг: 0 / 0
Как бурать дубликаты?
    #40134919
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster
felix_ff
Ролг Хупин,

Код: sql
1.
2.
3.
4.
select top(1) with ties
     [name], [size], [cat], [cond], [created]
from @Products
order by row_number() over (partition by [name], [size], [cat] order by [created] desc);



мой вариант лаконичнее в плане кода, но должен быть несколько медленней в плане производительности из-за еще одного оператора сортировки в плане.

К сожалению, он может быть СИЛЬНО хуже по производительности, если таким образом оформляется подзапрос, с результатами которого потом связываются какие-нибудь внешние таблицы и т.д.
Оптимизатор оценивает количество возвращаемых записей из такого подзапроса =1, и соответственно, внешние таблицы связывает с ним через NL.
Вариант, когда N=row_number() over (partition by [name], [size], [cat] order by [created] desc) рассчитывается явно, и во Where явно фигурирует N=1 - таким недостатком не обладает, и соединение производится правильно, в зависимости от количества записей в выборке подзапроса.



когда несете чушь, несите осторожней что бы не расплескать, потому что ценна только полная чушь.

другое дело что и оценка кол-ва строк тянется не с top, а с предыдущих операторов.


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
drop table if exists #products;

create table #products (
[name] nvarchar(50),
[size] smallint,
[cat] nvarchar(50),
[cond] nvarchar(50),
[created] datetime,
index ix (name, size, cat, created desc, cond)
);


insert into #Products(name, size, cat, cond, [created]) values(N'Product1', 20,  N'Phone1', N'OK',		'2022-01-22 08:00');
insert into #Products(name, size, cat, cond, [created]) values(N'Product1', 20,  N'Phone1', N'OK',	    '2022-01-12 05:00');
insert into #Products(name, size, cat, cond, [created]) values(N'Product1', 20,  N'Phone1', N'OK',	    '2022-01-05 05:00');
insert into #Products(name, size, cat, cond, [created]) values(N'Product2', 400, N'Note2', N'OKOK',	'2022-01-20 07:00');
insert into #Products(name, size, cat, cond, [created]) values(N'Product3', 255, N'Note', N'OK',		'2022-01-22 11:00');
insert into #Products(name, size, cat, cond, [created]) values(N'Product4', 385, N'Note', N'OK',		'2022-01-21 11:00');
insert into #Products(name, size, cat, cond, [created]) values(N'Product5', 420, N'Note', N'SOSO',		'2022-01-21 14:00');
insert into #Products(name, size, cat, cond, [created]) values(N'Product5', 420, N'Note', N'OK',		'2022-01-05 13:00');
insert into #Products(name, size, cat, cond, [created]) values(N'Product10', 8800, N'No', N'OK',		'2022-01-08 11:00');

set statistics xml on
select top(1) with ties
      [name], [size], [cat], [cond], [created]
from #Products
order by row_number() over (partition by [name], [size], [cat] order by [created] desc)

set statistics xml off




Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
<ShowPlanXML xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan" Version="1.518" Build="13.0.5850.14">
  <BatchSequence>
    <Batch>
      <Statements>
        <StmtSimple StatementText="select top(1) with ties&#xD;&#xA;      [name], [size], [cat], [cond], [created]&#xD;&#xA;from #Products&#xD;&#xA;order by row_number() over (partition by [name], [size], [cat] order by [created] desc)" StatementId="1" StatementCompId="13" StatementType="SELECT" RetrievedFromCache="false" StatementSubTreeCost="0.0146997" StatementEstRows="9" SecurityPolicyApplied="false" StatementOptmLevel="FULL" QueryHash="0x1052DC46FAA7F1C3" QueryPlanHash="0x7ACEE0E7E31F6462" StatementOptmEarlyAbortReason="GoodEnoughPlanFound" CardinalityEstimationModelVersion="130">
          <StatementSetOptions QUOTED_IDENTIFIER="true" ARITHABORT="true" CONCAT_NULL_YIELDS_NULL="true" ANSI_NULLS="true" ANSI_PADDING="true" ANSI_WARNINGS="true" NUMERIC_ROUNDABORT="false">
          </StatementSetOptions>
          <QueryPlan DegreeOfParallelism="0" MemoryGrant="1024" NonParallelPlanReason="MaxDOPSetToOne" CachedPlanSize="24" CompileTime="0" CompileCPU="0" CompileMemory="160">
            <MemoryGrantInfo SerialRequiredMemory="512" SerialDesiredMemory="544" RequiredMemory="512" DesiredMemory="544" RequestedMemory="1024" GrantWaitTime="0" GrantedMemory="1024" MaxUsedMemory="16" MaxQueryMemory="6376904">
            </MemoryGrantInfo>
            <OptimizerHardwareDependentProperties EstimatedAvailableMemoryGrant="290133" EstimatedPagesCached="217600" EstimatedAvailableDegreeOfParallelism="1" MaxCompileMemory="19018816">
            </OptimizerHardwareDependentProperties>
            <TraceFlags IsCompileTime="1">
              <TraceFlag Value="1222" Scope="Global">
              </TraceFlag>
              <TraceFlag Value="1224" Scope="Global">
              </TraceFlag>
            </TraceFlags>
            <TraceFlags IsCompileTime="0">
              <TraceFlag Value="1222" Scope="Global">
              </TraceFlag>
              <TraceFlag Value="1224" Scope="Global">
              </TraceFlag>
            </TraceFlags>
            <QueryTimeStats ElapsedTime="0" CpuTime="0">
            </QueryTimeStats>
			  <RelOp NodeId="0" PhysicalOp="Top" LogicalOp="Top" >
				  EstimateRows="9" < EstimateIO="0" EstimateCPU="9e-007" AvgRowSize="175" EstimatedTotalSubtreeCost="0.0146997" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row">
				  <OutputList>
					  <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#Products]" Column="name">
					  </ColumnReference>
					  <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#Products]" Column="size">
					  </ColumnReference>
					  <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#Products]" Column="cat">
					  </ColumnReference>
					  <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#Products]" Column="cond">
					  </ColumnReference>
					  <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#Products]" Column="created">
					  </ColumnReference>
				  </OutputList>
				  <RunTimeInformation>
					  <RunTimeCountersPerThread Thread="0" ActualRows="6" Batches="0" ActualExecutionMode="Row" ActualElapsedms="0" ActualCPUms="0" ActualEndOfScans="1" ActualExecutions="1">
					  </RunTimeCountersPerThread>
				  </RunTimeInformation>
				  <Top RowCount="0" IsPercent="0" > WithTies="1" < >
					  <TieColumns>
						  <ColumnReference Column="Expr1003">
						  </ColumnReference>
					  </TieColumns>
					  <TopExpression>
						  <ScalarOperator ScalarString="(1)">
							  <Const ConstValue="(1)">
							  </Const>
						  </ScalarOperator>
					  </TopExpression>
					  <RelOp NodeId="1" PhysicalOp="Sort" LogicalOp="Sort" EstimateRows="9" EstimateIO="0.0112613" EstimateCPU="0.000144689" AvgRowSize="183" EstimatedTotalSubtreeCost="0.0146988" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row">
						  <OutputList>
							  <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#Products]" Column="name">
							  </ColumnReference>
							  <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#Products]" Column="size">
							  </ColumnReference>
							  <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#Products]" Column="cat">
							  </ColumnReference>
							  <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#Products]" Column="cond">
							  </ColumnReference>
							  <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#Products]" Column="created">
							  </ColumnReference>
							  <ColumnReference Column="Expr1003">
							  </ColumnReference>
						  </OutputList>
						  <MemoryFractions Input="1" Output="1">
						  </MemoryFractions>
						  <RunTimeInformation>
							  <RunTimeCountersPerThread Thread="0" ActualRows="7" Batches="0" ActualExecutionMode="Row" ActualElapsedms="0" ActualCPUms="0" ActualScans="0" ActualLogicalReads="0" ActualPhysicalReads="0" ActualReadAheads="0" ActualLobLogicalReads="0" ActualLobPhysicalReads="0" ActualLobReadAheads="0" ActualRebinds="1" ActualRewinds="0" ActualEndOfScans="0" ActualExecutions="1" InputMemoryGrant="1024" OutputMemoryGrant="640" UsedMemoryGrant="16">
							  </RunTimeCountersPerThread>
						  </RunTimeInformation>
						  <Sort Distinct="0">
							  <OrderBy>
								  <OrderByColumn Ascending="1">
									  <ColumnReference Column="Expr1003">
									  </ColumnReference>
								  </OrderByColumn>
							  </OrderBy>
							  <RelOp NodeId="2" PhysicalOp="Sequence Project" LogicalOp="Compute Scalar" EstimateRows="9" EstimateIO="0" EstimateCPU="7.2e-007" AvgRowSize="183" EstimatedTotalSubtreeCost="0.0032928" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row">
								  <OutputList>
									  <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#Products]" Column="name">
									  </ColumnReference>
									  <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#Products]" Column="size">
									  </ColumnReference>
									  <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#Products]" Column="cat">
									  </ColumnReference>
									  <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#Products]" Column="cond">
									  </ColumnReference>
									  <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#Products]" Column="created">
									  </ColumnReference>
									  <ColumnReference Column="Expr1003">
									  </ColumnReference>
								  </OutputList>
								  <RunTimeInformation>
									  <RunTimeCountersPerThread Thread="0" ActualRows="9" Batches="0" ActualExecutionMode="Row" ActualElapsedms="0" ActualCPUms="0" ActualEndOfScans="1" ActualExecutions="1">
									  </RunTimeCountersPerThread>
								  </RunTimeInformation>
								  <SequenceProject>
									  <DefinedValues>
										  <DefinedValue>
											  <ColumnReference Column="Expr1003">
											  </ColumnReference>
											  <ScalarOperator ScalarString="row_number">
												  <Sequence FunctionName="row_number">
												  </Sequence>
											  </ScalarOperator>
										  </DefinedValue>
									  </DefinedValues>
									  <RelOp NodeId="3" PhysicalOp="Segment" LogicalOp="Segment" EstimateRows="9" EstimateIO="0" EstimateCPU="1.8e-007" AvgRowSize="183" EstimatedTotalSubtreeCost="0.00329208" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row">
										  <OutputList>
											  <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#Products]" Column="name">
											  </ColumnReference>
											  <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#Products]" Column="size">
											  </ColumnReference>
											  <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#Products]" Column="cat">
											  </ColumnReference>
											  <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#Products]" Column="cond">
											  </ColumnReference>
											  <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#Products]" Column="created">
											  </ColumnReference>
											  <ColumnReference Column="Segment1004">
											  </ColumnReference>
										  </OutputList>
										  <RunTimeInformation>
											  <RunTimeCountersPerThread Thread="0" ActualRows="9" Batches="0" ActualExecutionMode="Row" ActualElapsedms="0" ActualCPUms="0" ActualEndOfScans="1" ActualExecutions="1">
											  </RunTimeCountersPerThread>
										  </RunTimeInformation>
										  <Segment>
											  <GroupBy>
												  <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#Products]" Column="name">
												  </ColumnReference>
												  <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#Products]" Column="size">
												  </ColumnReference>
												  <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#Products]" Column="cat">
												  </ColumnReference>
											  </GroupBy>
											  <SegmentColumn>
												  <ColumnReference Column="Segment1004">
												  </ColumnReference>
											  </SegmentColumn>
											  <RelOp NodeId="4" PhysicalOp="Index Scan" LogicalOp="Index Scan" EstimateRows="9" EstimatedRowsRead="9" EstimateIO="0.003125" EstimateCPU="0.0001669" AvgRowSize="175" EstimatedTotalSubtreeCost="0.0032919" TableCardinality="9" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row">
												  <OutputList>
													  <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#Products]" Column="name">
													  </ColumnReference>
													  <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#Products]" Column="size">
													  </ColumnReference>
													  <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#Products]" Column="cat">
													  </ColumnReference>
													  <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#Products]" Column="cond">
													  </ColumnReference>
													  <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#Products]" Column="created">
													  </ColumnReference>
												  </OutputList>
												  <RunTimeInformation>
													  <RunTimeCountersPerThread Thread="0" ActualRows="9" Batches="0" ActualExecutionMode="Row" ActualElapsedms="0" ActualCPUms="0" ActualScans="1" ActualLogicalReads="2" ActualPhysicalReads="0" ActualReadAheads="0" ActualLobLogicalReads="0" ActualLobPhysicalReads="0" ActualLobReadAheads="0" ActualRowsRead="9" ActualEndOfScans="1" ActualExecutions="1">
													  </RunTimeCountersPerThread>
												  </RunTimeInformation>
												  <IndexScan Ordered="1" ScanDirection="FORWARD" ForcedIndex="0" ForceSeek="0" ForceScan="0" NoExpandHint="0" Storage="RowStore">
													  <DefinedValues>
														  <DefinedValue>
															  <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#Products]" Column="name">
															  </ColumnReference>
														  </DefinedValue>
														  <DefinedValue>
															  <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#Products]" Column="size">
															  </ColumnReference>
														  </DefinedValue>
														  <DefinedValue>
															  <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#Products]" Column="cat">
															  </ColumnReference>
														  </DefinedValue>
														  <DefinedValue>
															  <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#Products]" Column="cond">
															  </ColumnReference>
														  </DefinedValue>
														  <DefinedValue>
															  <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#Products]" Column="created">
															  </ColumnReference>
														  </DefinedValue>
													  </DefinedValues>
													  <Object Database="[tempdb]" Schema="[dbo]" Table="[#Products]" Index="[ix]" IndexKind="NonClustered" Storage="RowStore">
													  </Object>
												  </IndexScan>
											  </RelOp>
										  </Segment>
									  </RelOp>
								  </SequenceProject>
							  </RelOp>
						  </Sort>
					  </RelOp>
				  </Top>
			  </RelOp>
          </QueryPlan>
        </StmtSimple>
      </Statements>
    </Batch>
  </BatchSequence>
</ShowPlanXML>





сиквел достаточно умный, он не обрубает estimated rows от инструкции top(1) with ties, потому что для оператора top with ties является специальным параметром (смотрите ниже по плану)
проблема не в конструкции запроса, а в использовании табличной переменной

p.s. как в теге src xml выделять только часть текста? он жрет >>> <<< нормально только когда тэг src, а когда xml представление выделяет всю строку. приходится писать >>>> <<<< но тогда в отображении появляется ненужные экранирующие символы.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как бурать дубликаты?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]