(1) 索引的优缺点,什么时候使用索引,什么时候不能使用索引(重点)
- 经常搜索的列上建索引
- 作为主键的列上要建索引
- 经常需要连接(where子句)的列上
- 经常需要排序的列
- 经常需要范围查找的列
哪些列不适合建索引?
- 很少查询的列
- 更新很频繁的列
- 数据值的取值比较少的列(比如性别)
(2) 索引的底层实现(重点)
数据库的索引是使用B+树来实现的。
(为什么要用B+树,为什么不用红黑树和B树)
B+树是一种特殊的平衡多路树,是B树的优化改进版本,它把所有的数据都存放在叶节点上,中间节点保存的是索引。这样一来相对于B树来说,减少了数据对中间节点的空间占用,使得中间节点可以存放更多的指针,使得树变得更矮,深度更小,从而减少查询的磁盘IO次数,提高查询效率。另一个是由于叶节点之间有指针连接,所以可以进行范围查询,方便区间访问。
而红黑树是二叉的,它的深度相对B+树来说更大,更大的深度意味着查找次数更多,更频繁的磁盘IO,所以红黑树更适合在内存中进行查找。
(3) MySQL怎么建立索引,怎么建立主键索引,怎么删除索引?
MySQL建立索引有两种方式:用alter table或者create index。
alter table table_name add primary key(column_list) #添加一个主键索引
alter table table_name add index (column_list) #添加一个普通索引
alter table table_name add unique (column_list) #添加一个唯一索引
create index index_name on table_name (column_list) #创建一个普通索引
create unique index_name on table_name (column_list) #创建一个唯一索引
Mysql删除索引同样也有两种方式:alter table 和 drop index
alter table table_name drop index index_name #删除一个普通索引
alter table table_name drop primary key #删除一个主键索引
drop index index_name on table table_name
(4) 索引类型
- 逻辑分类
- 主键索引:当关系表中定义主键时,会自动创建主键索引。每张表中的主键索引只能有一个,要求主键中的每个值都唯一,即不可重复,也不能为空
- 唯一索引:数据列不能有重复,但可以有空值,一张表可以有多个唯一索引,但是每个唯一索引只能有一列
- 普通索引:一张表可以有多个普通索引,可以重复,可以为空值。
- 全文索引:可以加快模糊查询
- 物理分类
- MySQL中最常见的两种存储引擎分别是MyISAM和InnoDB,分别实现了「非聚集索引(普通索引)「和」聚集索引」;
- 聚集索引:数据在物理存储中的顺序跟索引中数据的逻辑顺序相同。
- 非聚集索引:数据在物理存储中的顺序跟索引中数据的逻辑顺序不同。
参考链接:https://www.cnblogs.com/wezheng/p/8399305.html