(一)什么是索引?
- 索引的出现主要是针对查询,为了提高查询速度。
- 索引是存储引擎快速用于找到记录的一种数据结构。
索引优化应该是对查询性能优化最有效的手段了。索引能够轻易将查询性能提高好几个数量级。
索引相当于字典的音序表,如果要查某个字,如果不使用音序表,则需要从几百页中逐页去查。
(二)索引的原理
- 索引的本质:
不断的缩小想要获取数据的范围筛选出最终想要的结果。
(三)常见的四种索引
- 主键索引(primary key)
- 唯一索引(unique)
- 普通索引(index)
- 全文索引(fulltext)
(四)索引的创建
- 主键索引的创建(三种方式)
主键索引即就是使用主键。
主键索引的创建方式有三种:
(1)在建表的时候直接在字段后指明主键。
(2)在建表的时候若有多个主键,定义为复合主键,在建表的最后全部指明。
(3)若表定义结束以后想定义主键,可以在建表之后追加主键
三种创建主键索引方式的举例:
// 1. 在创建表的时候,直接在字段后指明
create table student(
id int primary key,
name varchar(20)
);
//2. 在建表的最后,指定某列或某几列为主键索引
create table student(
id int,
name varchar(20),
age int,
primary key(id, name)
);
//3. 创建表以后添加主键
create table student(
id int ,
name varchar(20)
);
alter table student add primary key(id);
主键索引的特点:
(1)一个表中,最多有一个主键索引,或者使用复合主键。
(2)主见不可重复。
(3)创建主键索引的列的值不能为空。
(4)主键索引的列基本为int。
2. 唯一索引(三种方式)
唯一索引的三种创建方式与主键索引类似,只需将primary key 换成 unique。
唯一索引的特点:
(1)在一个表中。可以有多个唯一索引。
(2)唯一索亚尼所在的列,不能有重复值。
(3)若将唯一索引所在的列指定为not null,则相当于主键索引。
3. 普通索引的创建(三种方式)
(1)在表的定义最后,指定某列为索引。
(2)在建完表以后,追加某列为索引(alter)。
(3)创建一个名为***的索引(create)。
普通索引创建的三种方式:
//1. 在表的定义最后,指定某列为索引
create table student(
id int ,
name varchar(20),
index(id)
);
//2. 在表创建完以后,追加某列为普通索引
create table student(
id int,
name varchar(20)
);
alter table tsudent add index(id);
//3. 创建一个名为** 的索引
create index id_name on student(name);
普通索引的特点:
一个表中可以有多个普通索引。
4. 全文索引
(1)当对大量文章字段进行检索时,使用全文索引。
(2)MySQL提供全文索引机制,但是前提是存储引擎必须是MyISAM,且默认为英文,不支持中文。
(1)全文索引的创建:
mysql> create table articles(
-> id int unsigned auto_increment primary key,
-> title varchar(200),
-> body text,
-> fulltext(title,body)
-> )engine=MyISAM;
Query OK, 0 rows affected (0.02 sec)
(2)如何使用全文索引
1)首先先插入一些数据:
mysql> insert into articles(title,body) values
-> ('one','123database'),
-> ('two','database666'),
-> ('three','123456'),
-> ('fore','abcdefg');
Query OK, 4 rows affected (0.01 sec)
2)查询有没有database数据
mysql> select * from articles where body like "%database%";
+----+-------+-------------+
| id | title | body |
+----+-------+-------------+
| 1 | one | 123database |
| 2 | two | database666 |
+----+-------+-------------+
3)使用explain工具查看是否使用索引
可以看到 key=null,此时表示没有用到索引
4)正确使用全文索引来查询数据
mysql> select * from articles
-> where match (title,body) against ('database');
(五)查询索引
查询索引有三种方法:
- show keys from 表名
- show index from 表名
- desc 表名
(六)删除索引
删除索引有三种方法:‘
- 删除主键索引:alter table 表名 drop primary key
- 删除其他索引:alter table 表名 drop index 索引名(即key_name)
- drop index 索引名 on 表名