实验任务(不包括选做任务)
创建唯一索引
在department表的departName字段上创建唯一性索引
创建复合索引
在employee表的name和address两个字段上创建一个复合索引
创建表的时候创建索引
创建与department表相同结构的表department1,并将departName 设为主键,departmentID上建立一个索引
创建HASH索引
创建一个包含(employeeID, name, education)等字段的临时员工表 (tmpEmployee) ,并在该表的员工编号字段上创建一个HASH索引
1.在department表的departName字段上创建唯一性索引
create unique index in_departName on department(departName) ;
2.在employee表的name和address两个字段上创建一个复合索引
create index in _name_address on employee (name, address);
3.创建与department表相同结构的表department1,并将departName设为主键,departmentID上建立一个索引
CREATE TABLE `department1` (
`departmentID` char(3 ) not null,
`departName` char(20) not null,
`comment` varchar(100) DEFAULT NULL,
PRIMARY KEY (`departName`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk ;
create index in_departmentId on department1(departmentID);
4.创建一个包含(employeeID, name, education)等字段的临时员工表(tmpEmployee) ,并在该表的员工编号字段上创建一个HASH索引
create table if not exists tmpEmployee(
employeeID varchar(6)
primary key not null,
name varchar(10) not null,
education varchar(10)
);
create index in_hash using hash on tmpEmployee(employeeId);
思考
MySQL里Create Index 能否创建主键 Primary Key?
答:不能,必须用 Alter table 创建。
添加主键与添加普通索引有什么区别?
答:主键索引也被称为聚簇索引,叶子节点存放的是整行数据; 而非主键索引被称为二级索引,叶子节点存放的是主键的值。如果根据主键查询, 只需要搜索ID这颗B+树。而如果通过非主键索引查询, 需要先搜索k索引树, 找到对应的主键, 然后再到ID索引树搜索一次, 这个过程叫做回表。
总结, 非主键索引的查询需要多扫描一颗索引树, 效率相对更低.
如果删除基本表的一个列或者多个列,该列上的索引会受怎样的影响?
答:索引是由数据库进行维护的,当我们对存在索引的数据库表进行增删改的操作时,如果涉及到索引列,数据库都会对索引表进行更新;由此可以推断出,当表中某个列被删除后,在该列上的索引也会被删除掉。