本文共 1694 字,大约阅读时间需要 5 分钟。
一、实例
1.创建唯一性索引SET STATISTICS TIME ONSELECT * FROM customer WHERE name ='阿爆' ;SET STATISTICS TIME OFFCREATE UNIQUE INDEX customer_name ON customer(name);--在customer表上的name列创建唯一性索引2.创建函数索引在零件表的零件名称字段上创建一个零件名称的函数索引sql server 不支持函数索引,因此需要添加长度列,在该列上创建索引ALTER TABLE part ADD name_length as LEN(name) persistedSET STATISTICS TIME ONSELECT * FROM part WHERE name_length=5 ;SET STATISTICS TIME OFFCREATE INDEX part_name ON part(name_length);3.创建复合索引SET STATISTICS TIME ONSELECT * FROM customer A,customer BWHERE A.name='阿倍仲麻吕'AND B.nationkey<200;SET STATISTICS TIME OFFCREATE INDEX name_nationkey ON customer(name,nationkey);4.创建聚簇索引如果在建表的时候建立了主键,没有建立聚簇索引,那么默认主键是聚簇索引CREATE TABLE region2(/*地区表*/ regionkey INTEGER ,/*地区编号*/ name CHAR(25), /*地区名称*/ comment CHAR(152) /*备注*/);CREATE CLUSTERED INDEX region_name ON region2(name);5.创建哈希索引ALTER TABLE part ADD hash_nameAS CAST(HASHBYTES('MD2',name)AS UNIQUEIDENTIFIER) PERSISTED;CREATE INDEX part_name ON part(hash_name);SET STATISTICS TIME ONSELECT * FROM part WHERE hash_name = CAST(HASHBYTES('MD2','竹炭空气清新篮') AS UNIQUEIDENTIFIER)SET STATISTICS TIME OFF6.修改索引名称CREATE INDEX name_nationkey ON customer(name,nationkey);sp_rename'customer.name_nationkey','name_nationkey2','INDEX';7.分析某个句子是否使用了索引SELECT * FROM customer A,customer BWHERE A.name='阿倍仲麻吕'AND B.nationkey<200;8.验证索引效率 SELECT DISTINCT nameFROM part;CREATE INDEX part_name ON part(name);--DROP INDEX part_name ON part;
二、注意
1、在创建唯一性索引的过程中出现了下面图片中的错误,后来经查询发现part表中name列上的值并不唯一,所以创建唯一索引会失败。
2.在创建聚簇索引时发现,如果在建表的时候建立了主键,没有建立聚簇索引,那么系统默认主键是聚簇索引,因此想要在有主键的表上实现建立聚簇索引,只能先删除主键,这样做其实并不实际。
3.创建索引可以加快查询的速度,但在试验中我发现并非所有的索引都会加快查询速度,因为索引本身就会导致额外的开销;此外,也并非所有的表都适合建立索引,如果一个表经常更新,索引往往会导致数据的物理顺序发生变化,付出的代价较大。