在很多的人印象里用了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语句一样会执行较久。