6.4 综合实例——创建索引
本章前面介绍了什么是索引,以及MySQL中索引的种类和各种索引的创建方法,如创建表的同时创建索引,以及使用ALTER TABLE或者CREATE INDEX语句创建索引。索引是提高数据库性能的一个强有力的工具,因此读者要掌握索引的创建方法。本节通过一个综合实例,让读者重温本章的重点知识。
1.案例目的
创建数据库index_test和两个数据表test_table1和test_table2,表的结构如表6-1和表6-2所示,然后按照操作过程完成对数据表的基本操作。
表6-1 test_table1表的结构
表6-2 test_table2表的结构
2.案例操作过程
step01 登录MySQL数据库。
打开Windows命令行,输入登录用户名和密码:
C:\>mysql –h localhost -u root -p Enter password: **
step02 创建数据库index_test。
创建数据库index_test的语句如下:
mysql> CREATE database index_test; Query OK, 1 row affected (0.00 sec)
结果显示创建成功,在index_test数据库中创建表,必须先选择该数据库,输入语句如下:
mysql> USE index_test; Database changed
结果显示选择数据库成功。
step03 创建表test_table1。
CREATE TABLE test_table1 ( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, name CHAR(100) NOT NULL, address CHAR(100) NOT NULL, description CHAR(100) NOT NULL, UNIQUE INDEX UniqIdx(id), INDEX MultiColIdx(name(20), address(30)), INDEX ComIdx( description(30) ) );
使用SHOW语句查看索引信息:
mysql> SHOW CREATE table test_table1 \G *************************** 1. row *************************** Table: test_table1 CREATE Table: CREATE TABLE 'test_table1' ( 'id' int(11) NOT NULL AUTO_INCREMENT, 'name' char(100) NOT NULL, 'address' char(100) NOT NULL, 'description' char(100) NOT NULL, UNIQUE KEY 'UniqIdx' ('id'), KEY 'MultiColIdx' ('name'(20),'address'(30)), KEY 'ComIdx' ('description'(30)) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
由结果可以看到,test_table1表中成功创建了3个索引,分别是:在id字段上名为UniqIdx的唯一索引;在name和address字段上的组合索引,两个索引列的长度分别为20个字符和30个字符;在description字段上的长度为30的普通索引。
step04 创建表test_table2,存储引擎为MyISAM。
CREATE TABLE test_table2 ( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, firstname CHAR(100) NOT NULL, middlename CHAR(100) NOT NULL, lastname CHAR(100) NOT NULL, birth DATE NOT NULL, title CHAR(100) NULL ) ENGINE=MyISAM;
step05 使用ALTER TABLE语句在表test_table2的birth字段上建立名为ComDateIdx的普通索引。
mysql> ALTER TABLE test_table2 ADD INDEX ComDateIdx(birth); Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0
step06 使用ALTER TABLE语句在表test_table2的id字段上添加名为UniqIdx2的唯一索引,并以降序排列。
mysql> ALTER TABLE test_table2 ADD UNIQUE INDEX UniqIdx2 (id DESC); Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0
step07 使用CREATE INDEX语句在firstname、middlename和lastname三个字段上建立名为MultiColIdx2的组合索引。
mysql> CREATE INDEX MultiColIdx2 ON test_table2(firstname, middlename, lastname); Query OK, 0 rows affected (0.05 sec) Records: 0 Duplicates: 0 Warnings: 0
step08 使用CREATE INDEX语句在title字段上建立名为FTIdx的全文索引。
mysql> CREATE FULLTEXT INDEX FTIdx ON test_table2(title); Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0
step09 使用ALTER TABLE语句删除表test_table1中名为UniqIdx的唯一索引。
mysql> ALTER TABLE test_table1 DROP INDEX UniqIdx; Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0
step10 使用DROP INDEX语句删除表test_table2中名为MultiColIdx2的组合索引。
mysql> DROP INDEX MultiColIdx2 ON test_table2; Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0