MySQL数据库应用案例课堂
上QQ阅读APP看书,第一时间看更新

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