SQL开发中容易忽视的一些小地方(五)
2009-01-15 10:19:30 来源:WEB开发网背景:
索引分类:众所周知,索引分为聚集索引和非聚集索引.
索引优点:加速数据查询.
问题:然而我们真的清楚索引的应用吗?你写的查询语句是否能充分应用上索引,或者说你如何设计你的索引让它更高效?
经历:以前本人只知道索引的好处,但是是否能够真正让它发挥作用,并无太多理论,为些本人做了些DEMO,来简单说明下什么情况下才能充分利用索引.
案例:
这里建立一个学生表:有如下字段,此时表中没有建立任何索引.CREATE TABLE [dbo].[student](
[ID] [int] IDENTITY(1,1) NOT NULL,--学生ID
[sUserName] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,--学生姓名
[sAddress] [varchar](200) COLLATE Chinese_PRC_CI_AS NULL,--学生地址
[classID] [int] NULL,--学生所属班级ID
[create_date] [datetime] NULL CONSTRAINT [DF_student_create_date] DEFAULT (getdate()) --入校时间
) ON [PRIMARY]
业务需求:
查询班级ID为9的所有学生的姓名和地址.
情况一:
--字段没有建立任何索引
select sUserName,sAddress from student
where classID=9
执行计划如下图:
结论:在没有任何索引的情况下,查询会选择全表扫描.
情况二:
给ID自增列创建一个聚集索引,我们很多情况下都是这样默认的,主键上就是聚集索引.同样的查询,不同的查询计划,发现此时虽然在输出列和条件中没有ID,但是查询选择了聚集查询.
更多精彩
赞助商链接