索引的创建与使用

创建:

CREATE INDEX index_name ON table_name(column_name1,[column_name2],…)默认是非簇索引。

种类:

按存储结构分簇索引、非簇索引。

簇索引对表中数据重新排序(顺序只有一个,所以只能有一个该索引)重新存储到物理硬盘上,叶节点存储的是实际的数据,进行过排序,速度会非常快,占用空间相当于表中数据空间的120%。

非簇索引具有与表的数据完全分离的结构,但不必排序,叶节点存储关键字的值和行定位器,然后将行定位器按照关键字排序,它使用索引页存储,比簇索引占用更多的空间,且效率较低。

可以建立多个非簇索引(理论最多249个)DBMS只对创建索引的列的键值进行排序,索引的表行不排序,并没有改变表中数据存放的物理位置。

如果创建多个非簇索引,比如SQL SERVER的查询优化器会自动决定在查询执行期间使用哪个索引,当然还可以强制使用哪个索引,WHERE子句的列之一必须是索引所在列:
SELECT column1,solumn2
FROM table_name
WITH(INDEX(index_name))
WHERE condition

创建索引后,数据库系统实际上创建了一个索引结构体,用户每次使用查询数据时,都是用相同的数据结构,从而节约了时间。

复合索引:

两个或者更多字段上创建的多字段索引称为复合索引,如对性别、名称进行索引创建:
CREATE INDEX SexName_index
ON student(sex,name)
sex的优先级大于name,查询结构先按sex排序(如先男后女),然后分别对男和女的名字进行排序

创建唯一索引(UNIQUE):

CREATE UNIQUE INDEX index_name ON table_name(column_name1,[column_name2],…)
使用唯一索引时,第一需要表中该列没有相同值,否则创建失败,第二要确保创建索引的列不会有相同的值出现,否则在插入和修改的时候如果有两条数据的该索引列值相同,会插入或者

更新失败。

创建簇索引(CLUSTERDE):

CREATE CLUSTERDE INDEX index_name ON table_name(column_name1,[column_name2],…)
带有簇索引的表,行是以索引顺序存放的。簇索引只有一个,创建新的要删除以前的簇索引。三点优势:
1、表占最小磁盘空间,因为插入时,会自动重用以前分配给删除行的空间。
2、所有列值在磁盘上相互靠近,有更快的查询执行速度。
3、不再需要ORDER BY语句。
对于经常发生插入操作和更新索引列值的表,尽量不要创建簇集索引。

索引销毁:

DROP INDEX index_name

创建索引需要注意以下几点:

1、小数据表不需要创建索引
2、查询结果小于所有数据25%时,使用索引最合适
3、索引列在WHERE子句中引频繁使用
4、要检索字段的数据包含很多数值或者NULL(空值)时,为该字段创建索引,会大大提升速度
5、尽量先装数据,再建索引,这样可以加快数据录入。否则,在初始化数据时,每插入一条记录都要维护一次索引
6、索引会降低数据更新速度,表中大量数据更新时,最好先销毁索引,再进行操作
7、索引占用空间,设计数据库时,把索引空间考虑进去
8、尽量把表和它的索引放在不同磁盘上来加快速度

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值