一:什么是索引:
MySQL 官方对索引的定义为:索引(Index)是帮助 MySQL 高效获取数据的数据结构。
二:索引种类介绍及使用:
1介绍:
1,普通索引:最基本的索引,没有任何限制,是我们经常使用到的索引。
2,唯一索引:与普通索引类似,不同的是,唯一索引的列值必须唯一,但允许为空值。
3,主键索引 : 主键索引是特殊的唯一索引,不允许有空值。
4,全文索引:全文索引(FULLTEXT)仅可以适用于MyISAM引擎的数据表,作用于CHAR, VARCHAR、TEXT数据类型的列。
5、组合索引(联合索引):将几个列作为一条索引进行检索,使用最左匹配原则。
2.使用:
- INDEX(普通索引)
alter table 数据库add index 索引名称(数据库字段名称)
- PRIMARY KEY(主键索引)
ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
- UNIQUE(唯一索引)
ALTER TABLE `table_name` ADD UNIQUE (`column`)
- FULLTEXT(全文索引)
mysql>ALTER TABLE `table_name` ADD FULLTEXT ( `column`)
- 联合索引
ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )
- 查看索引 show index from 数据库表名
- 删除索引 DROP INDEX <索引名> ON <表名>
3.问题
(1)mysql 联合索引 复合索引命中规则:
https://jingyan.baidu.com/article/77b8dc7f2844402074eab6de.html
(2) 还有一个特殊情况说明下,下面这种类型的SQL, a 与 b 会走索引,c不会走。
select * from LOL where a = 2 and b > 1000 and c=3;
(3) ORDER BY
a = 某,后面order 无所谓 都 使用索引 (和最上面的最左匹配一样)
a = 1 AND b = 2 AND c = 3 ORDER BY a;// 或者 ORDER BY b , ORDER BY c ,ORDER BY d, 使用索引
a = 1 ORDER BY a; // 或者 ORDER BY b,ORDER BY c,ORDER BY d 使用abc索引
b = 某,不使用
b = 1 ORDER BY a; //ORDER BY b 都 未使用索引
查询在什么时候不走(预期中的)索引
- 模糊查询 %like
- 索引列参与计算,使用了函数
- 非最左前缀顺序
- where对null判断
- where不等于
- or操作有至少一个字段没有索引
- 需要回表的查询结果集过大(超过配置的范围)
唯一索引与普通索引那个更快?
答: 查询时 : 普通索引与唯一索引之间的性能差异可以忽略。
更新语句时:普通索引比唯一索引要快, 因为普通索引不要判断有没有唯一值的冲突。