1.what is 索引?
索引是一种对数据库表中一列或多列的值进行排序的数据结构,类似于目录,用来方便查询,帮助我们快速进行数据查找
2.索引是什么样一种数据结构?
不同的存储引擎所使用的索引结构不同。常用的索引数据类型用B+树索引,hash索引,InnoDB存储引擎所使用的就是B+树索引。
3.索引的优缺点?
索引可以加快数据库检索速度,但同时降低插入、修改、删除等对数据维护速度(因为需要对索引进行更新,假如给age列增加了索引,age=5修改成了age=8,因为age列有索引,所以会对age列进行排序,值改变很有可能会造成索引的改变,加长了数据修改时间),占用物理和数据空间
4.常用的索引类型?
按列属性划分,索引可分为单列索引和组合索引
- 单列索引:以表中的一个列字段创建索引
- 组合索引:以表中的多个列字段组合创建索引
同时,索引又可以分成普通索引、主键索引、唯一索引、全文索引
- 普通索引:非主键、非唯一列的索引,仅用来加快查询速度
- 唯一索引:非主键,但不允许创建该索引的列有重复的值,可以为null
- 主键索引:为表创建主键,将自动创建主键索引,主键索引是唯一索引的一种特殊类型,主键索引不仅加快查询速度还要求主键唯一且不为null
- 全文索引:对文本内容进行分词,进行搜索,用于对一篇文章进行查找,在大量级的文本信息中,使用like %关键词%效率比普通索引要快
5.索引的创建
单列索引
alter table 表名 add index(列名)
组合索引
alter table 表名 add index(列名1,列名2)
6.什么时候需要创建索引?
- 在经常需要查询的列创建索引,提高查询效率
- 一般表的主键和外键都需要创建索引,因为主键外键查询都比较多
- 在经常需要根据范围查询的列创建索引,因为索引已经进行了排序,指定的范围是连续的,查询时效率更高
- 索引应该创建在小字段,对于大字段(较长的文本字段)则不适合创建索引
- 在经常需要排序的列上创建索引,这样就可以使用索引的排序,加快查询时间
- 在经常出现在where子句中的列上创建索引,这样可以加快条件的判断速度
7.什么时候不需要创建索引?
-
对于在查询中很少使用的列不应该创建索引,索引不是只有优点,也会带来缺点
-
对于增删比较频繁的列(修改大于查询)
-
对于只有很少数据值的列,如性别,性别只有男女,即使使用索引,查询速度也无异于全表扫描
8.什么条件下索引失效?
- 查询中有
like %
时,相当于全表扫描 - 检索字段进行是否为空判断时,如
select id from user where age=null
- 使用not in 、not exits 、!=时 ,例如
select id from user where age in(21,22,23)
- 对索引运算导致索引失效,例如
select*from test where id-1=9