正确认识TOP关键字
作者:喻家军 发表时间:2015-03-05 22:29:39

在很多的人印象里用了TOP关键字SQL语句就会执行很快,其实不然,快是因为你数据量小,或者用到了索引查询条件等。

下面新建表:

CREATE TABLE [dbo].[Users](
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[Name] [varchar](50) NULL,
	[Age] [int] NULL,
PRIMARY KEY CLUSTERED 
(
	[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

ID为主键,自动创建聚集索引

运行一条简单sql语句:

SELECT TOP 1* FROM USERS

返回速度确实很快,我们来看看执行计划:


从上图可以看到,整个查询用的是索引扫描,说明首先在索引方面不会提高速度,TOP 1只是强制返回了一条数据,所以很快返回了,让我们误以为用了TOP就提高了性能,其实也是全表扫描得到的结果。

会不会因为查询返回的列不是索引而导致全表扫描呢?试试就知道,执行以下SQL语句:

SELECT TOP 1 ID FROM USERS

执行计划:


可以看到这跟返回列是否是索引无关,一样使用全表扫描,当使用了查询条件并且查询条件比较慢时,SQL语句一样会执行较久。