我有一个关于在SQL Azure上对使用群集群集索引的表使用Top的问题。Azure SQL,群集列存储索引,“TOP”性能
这两个表都具有群集列存储索引,表HeaderTable具有300K行,表ValuesTable具有6.5M行。
-- with no "Top"
--responce after 2 sec
declare @Date datetime = getdate()
select zp.idCol1, Value1, zp.idcol2 from [HeaderTable] zp
inner join [dbo].[ValuesTable] zpp
on zp.idcol2 = zpp.idcol2
where zp.Date > @Date-30 and zp.Date < @Date-10 and zp.idCol1>0 and zpp.Value2 = 'SZT'
order by idcol2
go
-- with "Top 100"
--responce after 27 sec
declare @Date datetime = getdate()
select top 100 zp.idCol1, Value1, zp.idcol2 from [HeaderTable] zp
inner join [dbo].[ValuesTable] zpp
on zp.idcol2 = zpp.idcol2
where zp.Date > @Date-30 and zp.Date < @Date-10 and zp.idCol1>0 and zpp.Value2 = 'SZT'
order by idcol2
go
-- Result into Temporary Table and Select top 100 from Temporaty Table
-- responce after 2 sec
declare @Date datetime = getdate()
select zp.idCol1, Value1, zp.idcol2 into #d from [HeaderTable] zp
inner join [dbo].[ValuesTable] zpp
on zp.idcol2 = zpp.idcol2
where zp.Date > @Date-30 and zp.Date < @Date-10 and zp.idCol1>0 and zpp.Value2 = 'SZT'
select top 100 * from #d order by #d.idcol2
drop table #d
go
正如您在第二个查询中看到的顶部操作非常缓慢。 也许有人对这个问题有一些提示?
您不能指向查询计划的特定元素,并保持它的责任。你几乎声称TOP总是很慢,这不可能是真的。将实际执行计划作为XML发布到某处。 – usr
这是计划:[链接](http://ws01.emigo.biz/xmlExecutionPlanTopProblem.xml) –