一、 什么是索引?
定义:索引是对数据库表中一列或多列的值进行排序的一种结构。
目的:可以快速访问数据库表中的特定信息;合理的设计索引可以很大程度减轻数据库的查询压力
二、索引的优缺点
优点:
1大大加快数据的查询速度
2唯一索引可以保证数据库表每一行的唯一性
3加速表连接时间
缺点:
1创建、维护索引要耗费时间,所以索引数量不能过多
2索引是一种数据结构,会占用磁盘空间
3对表进行更新操作时,索引也要动态维护,降低了维护速度
三、常用索引的数据结构
哈希表、有序数组、搜索树
四、索引的类型
1普通索引(最基本的)
username是列名,user是表名
2唯一性索引。索引列只能出现1次
create unique index `username` ON user(username);
3主键索引。不能有重复的列,必须指定primary key。不允许空值。主键更适合选择不容易更改的列数据(比如身份证号)
4全文索引
create fulltext index `username` ON user(username);
5联合索引
五、索引失效的情况列举
1用了null
select * from user where username is not null;
2用了or。如下,只要password列没有索引,那么username的索引也不会起作用
select * from user where username="cindy" or password="123123"
3用了not,in,not exists,<>。当查询条件为非时,执行语句可能是全表扫描
如
select * from user where password not in ("123123")
4用了%开头的like查询。%在前面,走的是全表扫描;%在最后,走的是索引
select * from user where username like "%c"
六、适合作为索引的列?
1主键字段
2被搜索次数的多的列。比如跟在where后的列
3连接表的条件字段。目的:加快连表查询速度
4作为排序、统计或者分组的字段
相对的,where条件用不到的字段,不适合作为索引
参考文章