索引介绍:
索引用于快速查找某个列中特定的值,不使用索引数据库必须从第一条记录开始查找,如果数据 越多则花费时间越长
索引是根据存储引擎实现的,MYSQL有2中索引存储类型;BTREE和HASH,InnoDB和MyISAM只支持BTREE索引
索引优点:
1.创建唯一索引,保存了数据的唯一性
2.加快了数据的查询速度
3.加速表和表之间的连接
缺点:
1.创建索引和维护索引要耗费时间,索引需要占磁盘空间,每个索引还要占一定的物理空间
2.如果对数据进行DML操作,索引需要动态的维护
索引的分类:
普通索引:允许插入重复值和空值
唯一索引:索引列的值必须唯一,但允许空值,主键索引是一种特殊的唯一索引,不允许空值
单列索引:即一个索引只包含一个列,一个表中可以有多个单列索引
组合索引:指在表的多个字段组合上创建的索引,只有在查询条件使用了这些字段的左边字段时,索引才会被使用,使用组合索引的时候遵循最左前缀集合
全文索引:类型为FULLTEXT,允许这些索引列插入重复值和空值,MYSQL只有MyISAM才支持全文索引
空间索引:对数据类型的字段建立的索引,MYSQL有4中空间数据类型,GEOMETRY,POINT,LINETRING,POLYGON, MYSQL只有MyISAM才支持空间索引
索引设计原则:
1:索引不是越多越好,索引会影响DML操作
2.对经常查询的表的字段创建索引
3.数据量较小的表最好不用使用索引,
4.在条件表达式中经常用到的不同值较多的列上建立索引
5.在频繁分组或者进行排序的列上建立索引,如果排序的有多个则建立组合索引
创建普通索引(加快数据的访问速度):
CREATE TABLE book(
id int ,
nmae varchar(50),
author varchar(50),
index (author)
)
EXPLAIN 语句输出结果介绍:
1.select _type:指定所使用的SELECT查询类型,当值为SIMPLE表示简单的SELECT,没有使用UNION和子查询。其他值有PRIMARY,UNION,SUBQUERY
2.table:指定数据库读取的数据表的名字,他们按被读顺序先后排列
3.type:指定了本数据表与其他数据表之间的关联关系,可能值为system,const,eq_ref,ref,range,index,All
4.possible_keys给出了MYSQL在搜索记录时可选用的各个索引
5.key:表示mysql实际选用的索引
6.key_len:给出索引按字节计算的长度,key_len的数值越小表示越快
7.ref:给出了关联关系的来一个数据表的数据列名字
8.rows:mysql在执行这个查询时预计会从这个数据表里读出的数据行的个数
9.extra:提供了关联操作的有关信息
创建唯一索引(减少查询索引列的操作时间):
CREATE TABLE book(
id int ,
nmae varchar(50),
author varchar(50),
UNIQUE INDEX uniqindex(author)
)
创建组合索引:
CREATE TABLE book(
id int ,
nmae varchar(50),
author varchar(50),
* INDEX mu(author,id)*
)
在创建好的表中添加索引:
ALTER TABLE table ADD INDEX name(cloumn);
或者
CREATE INDEX aa ON book(id);
查看表中创建的索引:SHOW INDEX FROM book;
删除索引:
ALTER TABLE book DROP INDEX aa;