今天有空,来测试一下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函数也是会使用索引的。