SQL语句(五) 索引建立

一、实例 

1.创建唯一性索引
SET STATISTICS TIME ON
SELECT * FROM customer WHERE name ='阿爆' ;
SET STATISTICS TIME OFF

CREATE UNIQUE INDEX customer_name ON customer(name);--在customer表上的name列创建唯一性索引
2.创建函数索引在零件表的零件名称字段上创建一个零件名称的函数索引
sql server 不支持函数索引,因此需要添加长度列,在该列上创建索引
ALTER TABLE part ADD name_length as LEN(name) persisted
SET STATISTICS TIME ON
SELECT * FROM part WHERE name_length=5 ;
SET STATISTICS TIME OFF

CREATE INDEX part_name ON part(name_length);
3.创建复合索引
SET STATISTICS TIME ON
SELECT * FROM customer A,customer B
WHERE A.name='阿倍仲麻吕'AND B.nationkey<200;
SET STATISTICS TIME OFF

CREATE 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_name
AS CAST(HASHBYTES('MD2',name)AS UNIQUEIDENTIFIER) PERSISTED;
CREATE INDEX part_name ON part(hash_name);

SET STATISTICS TIME ON
SELECT * FROM  part WHERE hash_name = CAST(HASHBYTES('MD2','竹炭空气清新篮') AS UNIQUEIDENTIFIER)
SET STATISTICS TIME OFF
6.修改索引名称
CREATE INDEX name_nationkey ON customer(name,nationkey);
sp_rename'customer.name_nationkey','name_nationkey2','INDEX';
7.分析某个句子是否使用了索引
SELECT * FROM customer A,customer B
WHERE A.name='阿倍仲麻吕'AND B.nationkey<200;
8.验证索引效率
  SELECT DISTINCT name
FROM part;
CREATE INDEX part_name ON part(name);
--DROP INDEX part_name ON part;

二、注意

1、在创建唯一性索引的过程中出现了下面图片中的错误,后来经查询发现part表中name列上的值并不唯一,所以创建唯一索引会失败。

SQL语句(五) 索引建立_第1张图片

2.在创建聚簇索引时发现,如果在建表的时候建立了主键,没有建立聚簇索引,那么系统默认主键是聚簇索引,因此想要在有主键的表上实现建立聚簇索引,只能先删除主键,这样做其实并不实际。

3.创建索引可以加快查询的速度,但在试验中我发现并非所有的索引都会加快查询速度,因为索引本身就会导致额外的开销;此外,也并非所有的表都适合建立索引,如果一个表经常更新,索引往往会导致数据的物理顺序发生变化,付出的代价较大。

你可能感兴趣的:(本科课程)