一、创建表时创建索引
创建表时可以创建索引,这种方式最简单、方便。
a、创建 students2 表,stu_num为主键索引,stu_name为唯一性索引(名为name_index),并在stu_address列上前五位字符创建索引(名为address_index)。
mysql> create table if not exists students2(
-> stu_num char(20) not null comment'学生学号',
-> stu_name char(6) not null comment'学生姓名',
-> stu_sex enum('男','女') default'男' comment'学生性别',
-> stu_birthday date not null comment'学生出生日期',
-> dep_num char(18) not null comment'院系编号',
-> stu_address varchar(20) not null comment'学生家庭住址',
-> stu_phone varchar(18) not null comment'学生联系电话',
-> stu_photo blob comment'学生照片',
-> primary key(stu_num),
-> unique index name_index(stu_name),
-> index address_index(stu_address(5)));
二、用 create index 语句创建索引
如果表已经创建好了,可以用 create index 语句建立索引。
a、创建普通索引。
为便于按地址查询,为 students 表的 stu_address 列上的前6个字符建立一个名为 address_index的升序索引。
mysql> create index address_index on students(stu_address(6) ASC);
为经常作为查询条件的字段建立索引。比如在students表中的 dep_num 字段创建一个名为 dep_num_index 普通索引。
mysql> create index dep_num_index on students(dep_num);
b、创建唯一性索引。
像学生的姓名、专业名称、部门名称、商品名称等之类的字段,一般情况下可建立一个唯一性索引。
在 course (课程表)中的 course_name 列上建立一个名为course_name_index的唯一性索引。
mysql> create unique index course_name_index on course(course_name);
在 teachers (教师表)中的 tea_name 列上建立一个名为 tea_name_index 的唯一性索引。
mysql> create unique index tea_name_index on teachers(tea_name);
c、创建多列索引。
可以在一个索引的定义中包含多个列,中间用逗号隔开,但是它们要属于同一个表,这样的索引叫做多列索引(复合索引)。
在achievement(成绩表)中的 stu_num 和 course_num 列上建立一个名为 stu_course_index 的复合索引。
mysql> create index stu_course_index on achievement(stu_num,course_num);
讨论:
1、对于 char 和 varchar 列,只用该列的一部分就可以创建索引,创建索引时用 col_name(length) 语法,对前缀编制索引。前缀包括每列值的前 length 个字符。blob 和 text 列也可以编制索引,但是必须给出前缀长度。
2、create index 不能创建主键索引,创建主键索引用 alter table ... add primary key()。
3、索引名可以不写,若不写,默认与列名相同。
三、用 alter table 语句创建索引
在已经形成的表中可以用 alter table 语句创建索引。
a、在teachers(教师信息表)中建立tea_num主键索引,建立tea_name和dep_num的复合索引,名为 tea_dep_index,加速表得检索速度。
mysql> alter table teachers
-> add primary key(tea_num),
-> add index tea_dep_index (tea_num,dep_num);
b、在 departments(院系表)中的dep_num建立名为 dep_num_index唯一性索引。
mysql> alter table departments add unique index dep_num_index(dep_num);