基本概念
索引是一种特殊的文件,按照某种算法记录了数据库表中数据的关键信息,通过查找该文件,能达到降低查询时间的目的。
索引用于快速找出某列中有特定值的行,不使用索引,MySQL必须从第一条记录开始完整读表,知道找出相关的行,表越大,查询的数据所花费的时间就越多,如果表中查询的列有一个索引,MySQL能快速的到达一个位置去搜索数据文件,而不必查看所有的数据,那么将会节省很大一部分时间。
索引存储类型
上面已经说过了,索引也是文件,只是比较特殊,分为两种:BTREE和HASH。具体为啥,先了解一下即可,即树和哈希值来存储字段。
MyIsAM和InnoDB存储引擎:只支持BTREE索引,也就是默认使用BTREE,不能够更换;
MEMORY 和 HEAP存储引擎:支持HASH和BTREE索引
索引的优势
1. 所有的Mysql列类型都可以被索引,也就是可以给任意字段设置索引;
2. 大大加快数据的查询时间
索引的缺点
a. 创建索引和维护索引需要耗费时间,并且随着数据量的增加所耗费的时间也会增加;
b. 索引页需要占用空间,数据表中的数据也会有最大上限值;如果存在大量的索引,索引文件可能会比数据文件更快达到上限值;
c. 当对表的数据进行增加、修改、删除时,索引也要动态维护,降低了数据的维护速度。
单列索引
一个索引只包含单个列,但是一个表中可以包含多个单列索引。
先建个表:
CREATE TABLE t_student (
id int not null,
name VARCHAR(255) not null,
age int DEFAULT 0,
address VARCHAR(255) null
);
先建一个数据表t_student,包含四个字段id,name,age,address。
普通索引
MySQL中基本索引类型,没有限制,允许在定义索引的列中插入重复值和空值,纯粹为了查询数据更快一点;建表时直接创建,我们以address建立索引
> CREATE TABLE t_student (
id int not null,
name VARCHAR(255) not null,
> age int DEFAULT 0,