索引的魅力

今天有空,来测试一下mssql2005的一条查询语句在聚集索、索引、无索引等情况下的查询速度及IO情况,表结构如下,共222994条记录。

CREATE TABLE [dbo].[TaoBaoTrade_0001](

    [nick] [nvarchar](100) NOT NULL,

    [iid] [char](32) NOT NULL,

    [created] [datetime] NOT NULL,

    [buyer_nick] [nvarchar](100) NOT NULL,

    [title] [nvarchar](100) NOT NULL,

    [price] [real] NOT NULL,

    [num] [int] NOT NULL,

    [type] [nvarchar](50) NOT NULL

) ON [Taobao2]

查询语句如下:

set statistics time on

set statistics io on

select * from taobaotrade_0001 where nick='紫紫粉粉' and datediff(day,created,'2009-04-18')=0

set statistics io off

set statistics time off

无索引查询情况:

SQL Server 执行时间:

   CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。

(4 行受影响)

'TaoBaoTrade_0001'。扫描计数 1,逻辑读取 4802 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

SQL Server 执行时间:

   CPU 时间 = 78 毫秒,占用时间 = 89 毫秒。

(nick)索引查询情况:

SQL Server 执行时间:
   CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。

(4 行受影响)
表 'TaoBaoTrade_0001'。扫描计数 1,逻辑读取 53 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

SQL Server 执行时间:
   CPU 时间 = 0 毫秒,占用时间 = 34 毫秒。

SQL Server 执行时间:
   CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。

(nick,Created)索引查询情况:

SQL Server 执行时间:

   CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。

(4 行受影响)

'TaoBaoTrade_0001'。扫描计数 1,逻辑读取 7 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

SQL Server 执行时间:

   CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

(nick,Created)聚集索引查询情况:

 SQL Server 执行时间:

   CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。

 (4 行受影响)

'TaoBaoTrade_0001'。扫描计数 1,逻辑读取 5 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

 SQL Server 执行时间:

   CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。

    通过此次测试,可以很明显看出有索引和无索引的区别,聚集索引比索引快一点。生活中也是这样,资料不仅有一个目录就可以了,最好还要按目录来存储,这样查找起来会更快。 还有使用datedif函数也是会使用索引的。

你可能感兴趣的:(索引)