目录
一、前景
数据库索引是为了提高查询速度而对表字段附加的一种标识。简单来说,索引其实是一种数据结构。数据库的索引类似于书籍的索引。在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库。
首先我们需要明白为什么索引会提高查询速度,数据库在执行一条SQL语句的时候,默认扫描方式是根据搜索条件进行全表扫描,遇到匹配条件的就加入搜索结果集合。如果我们对某一字段增加索引,查询时就会先去索引列表中一次定位到特定值的行数,大大减少遍历匹配的行数,所以数据库索引能明显提高查询的速度。
下面列举几种适合建立索引的情况:
- 经常在where条件中作为查询条件的字段可以建立索引;
- 外键关联列可以建立索引;
- order by排序后面的字段可以建立索引;
- group by分组后的字段可以建立索引;
- …
二、名词
- CREATE 创建标识
- OR REPLACE INDEX 后跟指定索引名称(模式+索引名)
- ON on后跟操作的表,及创建的字段
- STORAGE 指定表空间关键字
- UNIQUE 唯一索引
- INDEX 普通索引
三、语法
1、命令方式创建索引
1.1 创建索引空间
create tablespace ind_tbs datafile '****/ind_**.dbf' size 32 autoextend on next 10 maxsize 2000;
1.2.1 创建普通索引并指定索引数据空间
create index ind_name on TEST.student(user_name) tablespace ind_tbs;
1.2.2 另一种没验证,官方写法
CREATE OR REPLACE INDEX "TEST"."index_p_b_c"
ON "TEST"."student" ( "user_name" ASC, "user_sex" ASC)
STORAGE ( ON "ind_tbs", CLUSTERBTR );
1.3 复合索引
create index ind_name_sex on TEST.student(user_name,user_sex) tablespace ind_tbs;
1.4 唯一索引
create unique index ind_phone on TEST.student(phone);
1.5 位图索引
1.6 函数索引
2、创建表时候创建索引
-- 创建表空间
create tablespace "student" datafile '***/student.DBF' size 32 autoextend on maxsize 16777215 CACHE = NORMAL;
-- 也可以创建一个索引空间分开存放(这里就把索引数据和数据放在一起了)
CREATE TABLE "TEST"."student"
(
"id" BIGINT NOT NULL,
"user_name" VARCHAR(16) NOT NULL,
"user_sex" INTEGER NOT NULL,
"phone" VARCHAR NOT(11) NULL,
"create_by" BIGINT DEFAULT 0 NOT NULL,
"create_time" TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP() NOT NULL,
"update_by" BIGINT DEFAULT 0 NOT NULL,
"update_time" TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP() NOT NULL,
NOT CLUSTER PRIMARY KEY("id"), -- 默认主键就是唯一索引
UNIQUE("phone") -- 创建手机号字段为唯一索引
) STORAGE(ON "student", CLUSTERBTR) ;
COMMENT ON TABLE "TEST"."student" IS '成本拆分记录';
COMMENT ON COLUMN "TEST"."student"."id" IS '主键';
COMMENT ON COLUMN "TEST"."student"."user_name" IS '姓名';
COMMENT ON COLUMN "TEST"."student"."user_sex" IS '性别';
COMMENT ON COLUMN "TEST"."student"."phone" IS '手机号';
COMMENT ON COLUMN "TEST"."student"."create_by" IS '创建人id';
COMMENT ON COLUMN "TEST"."student"."create_time" IS '创建时间';
COMMENT ON COLUMN "TEST"."student"."update_by" IS '修改人id';
COMMENT ON COLUMN "TEST"."student"."update_time" IS '修改时间';
-- 创建复合索引
CREATE OR REPLACE INDEX "TEST"."index_phone" ON "TEST"."student"("user_name" ASC,"user_sex" ASC) STORAGE(ON "student", CLUSTERBTR) ;
3、可视化方式创建索引
3.1 打开DM管理工具
3.2 找到要创建索引的表,右击选择创建索引
3.3. 选择规则及字段
3.4. 选择数据储存位置
3.5. 完成||验证
四、示例
一张student表,含有id,user_name, user_sex,phone …字段
** 以下操作示例:
- – TEST 为模式
- – student 为表名称
1、创建一个索引表空间名为ind_student
create tablespace ind_student datafile '****/ind_student.dbf' size 32 autoextend on next 10 maxsize 2000;
2、根据user_name, user_sex创建复合索引
create index ind_name_sex on TEST.student(user_name,user_sex) tablespace ind_student;
3、根据phone创建唯一索引
create unique index ind_phone on TEST.student(phone);