为什么要有索引?就像为什么书要有目录一样。
索引是什么东西?和目录一样成为书的一部分。
索引是由什么组成的?原文中具有代表性的一部分。
索引有三种添加方式:
1. 在创建表的时候,直接在列名后面添加 或在后面单独定义
2. 在表外为其创建
3. 外界进行修改时添加
CREATE TABLE user ( id key, key index_id (id) ); CREATE INDEX index_id ON user(id); ALTER TABLE user ADD INDEX index_id(id);
索引有五种分类:
普通索引,
关键词 Key 、Index
作用:起普通目录的作用,没有加上任何限制条件,一个表可以存在多个普通索引
唯一索引,
关键词 Unique Key 、Unique Index
作用:规定定义为唯一索引的列,不允许包含重复项但允许为NULL
主键索引,
关键词 Primary Key 、Primary Index
作用:在唯一索引的基础上,不允许为NULL
全文索引,
关键词 FullText
作用:专为模糊查询服务,有一套全新的查询语法
SELECT * FROM user WHERE MATCH (id ) AGAINST ( ' xxx ');
组合索引,
关键词 Key (列1,列2 ...)
作用:对于多条件查询会显著提高速度,但是存储该索引的代价也很大
局限性:
1. 最左原则。即只要你是从“列1”开始查询,你的绝大部分查询(不包含%xx、%xx%)方式都可以使用到该索引,但如果你不包含“列1” 的查询无法使用该查询。
2. 舍后原则。即如果你查询条件中包含 “列1”、“列3”... ,那么由于你跳过了“列2”则该索引只会使用“列1” 去进行查询,后面的全部舍弃。同等与,你只写了 “列1” 之这一个查询条件
3. 模止原则。即在你的查询条件中,设置 “列2” 为“xx%” 的模糊查询,那么索引会将“列2”之后的所有列舍去。
多说一点:
全文索引和唯一索引的区别:
1. 本质:
全文索引是,一种约束。
唯一索引是,一种索引。
2. 组成:
全文索引包含了不可重复性,并不允许为NULL。自增长必须依赖全文索引。
唯一索引也有不可重复性,但允许为NULL。
3.作用:
全文索引可以被其他表引用成外键,并且一张表中只有一个全文索引。
唯一索引无法成为外键,而且一张表可以有多个唯一索引。
小疑问:
组合索引时,
1.查询的时候不按照索引的顺序查询,如 WHERE “列2” AND “列1” AND “列3” 是否能用上?
2.查询超出索引设定的列时,是否还能起作用?
都可以
也许到这里,你会使用简单的语法去让数据库帮你实现索引。
但是,面对为什么索引能够让查询变的高效化时,你又会变得束手无策。
我们要知其然,还要知其所以然。