MySQL 데이터베이스 인덱스 강화 연습
머리말
이 환경은 Centos 7.8 시스템을 기반으로
특정 구성 을 위해 MySQL-5.7.14를 빌드 합니다. MySQL-5.7.14 환경 구성을 참조하십시오.
表结构如下:
writers表结构
字段名 数据类型 主键 外键 非空 唯一 自增
w_id SMALLINT(11) 是 否 是 是 是
w_name VARCHAR(255) 否 否 是 否 否
w_address VARCHAR(255) 否 否 否 否 否
w_age CHAR(2) 否 否 是 否 否
w_note VARCHAR(255) 否 否 否 否 否
(1)在数据库里创建表writers,存储引擎为MyISAM,创建表的同时在w_id字段上添加名称为UniqIdx的唯一索引
创建writers表
mysql> create table writers
-> (w_id SMALLINT(11) primary key auto_increment,
-> w_name VARCHAR(255) not null,
-> w_address VARCHAR(255),
-> w_age CHAR(2) not null,
-> w_note VARCHAR(255))
-> ENGINE=MyISAM DEFAULT CHARSET=utf8;
查看表结构
mysql> desc writers;
+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| w_id | smallint(11) | NO | PRI | NULL | auto_increment |
| w_name | varchar(255) | NO | | NULL | |
| w_address | varchar(255) | YES | | NULL | |
| w_age | char(2) | NO | | NULL | |
| w_note | varchar(255) | YES | | NULL | |
+-----------+--------------+------+-----+---------+----------------+
查看建表信息
mysql> show create table writers\G
*************************** 1. row ***************************
Table: writers
Create Table: CREATE TABLE `writers` (
`w_id` smallint(11) NOT NULL AUTO_INCREMENT,
`w_name` varchar(255) NOT NULL,
`w_address` varchar(255) DEFAULT NULL,
`w_age` char(2) NOT NULL,
`w_note` varchar(255) DEFAULT NULL,
PRIMARY KEY (`w_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
(2)使用alter table语句在w_name字段上建立nameIdx的普通索引
mysql> alter table writers
-> add index nameIdx(w_name);
mysql> show create table writers\G
*************************** 1. row ***************************
Table: writers
Create Table: CREATE TABLE `writers` (
`w_id` smallint(11) NOT NULL AUTO_INCREMENT,
`w_name` varchar(255) NOT NULL,
`w_address` varchar(255) DEFAULT NULL,
`w_age` char(2) NOT NULL,
`w_note` varchar(255) DEFAULT NULL,
PRIMARY KEY (`w_id`),
KEY `nameIdx` (`w_name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
(3)使用CREATE INDEX 语句在w_address和w_age字段上面建立名称为MultiIdx的组合索引
mysql> create index MultiIdx on writers(w_address,w_age);
mysql> show create table writers\G
*************************** 1. row ***************************
Table: writers
Create Table: CREATE TABLE `writers` (
`w_id` smallint(11) NOT NULL AUTO_INCREMENT,
`w_name` varchar(255) NOT NULL,
`w_address` varchar(255) DEFAULT NULL,
`w_age` char(2) NOT NULL,
`w_note` varchar(255) DEFAULT NULL,
PRIMARY KEY (`w_id`),
KEY `nameIdx` (`w_name`),
KEY `MultiIdx` (`w_address`,`w_age`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
(4)使用create index语句在w_note字段上建立名称为FTIdex的全文索引
mysql> create fulltext index FTIdex on writers(w_note);
mysql> show create table writers\G
*************************** 1. row ***************************
Table: writers
Create Table: CREATE TABLE `writers` (
`w_id` smallint(11) NOT NULL AUTO_INCREMENT,
`w_name` varchar(255) NOT NULL,
`w_address` varchar(255) DEFAULT NULL,
`w_age` char(2) NOT NULL,
`w_note` varchar(255) DEFAULT NULL,
PRIMARY KEY (`w_id`),
KEY `nameIdx` (`w_name`),
KEY `MultiIdx` (`w_address`,`w_age`),
FULLTEXT KEY `FTIdex` (`w_note`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
(5)删除名为FTIdx的全文索引
mysql> drop index FTIdex on writers;
mysql> show create table writers\G
*************************** 1. row ***************************
Table: writers
Create Table: CREATE TABLE `writers` (
`w_id` smallint(11) NOT NULL AUTO_INCREMENT,
`w_name` varchar(255) NOT NULL,
`w_address` varchar(255) DEFAULT NULL,
`w_age` char(2) NOT NULL,
`w_note` varchar(255) DEFAULT NULL,
PRIMARY KEY (`w_id`),
KEY `nameIdx` (`w_name`),
KEY `MultiIdx` (`w_address`,`w_age`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8