一、索引

1.索引概述

索引(Index)是帮助MySQL高效获取数据的数据结构。

索引是在存储引擎中实现的

2.索引的优缺点

优点:

1.降低数据库的IO成本

2.保证数据唯一性

约束保障:唯一索引、主键索引可自动实现唯一性约束。

3.加速表和表之间的连接

4.减少查询中分组和排序的时间

缺点:

1.降低更新表速度占用额外磁盘空间

2.存在索引失效风险

    索引失效场景(高频考点)

·违反最左匹配

·索引列做运算、函数、类型转换

·like %xxx 左模糊(like xxx% 可用索引)

·or 两侧有字段无索引

·not in / not exists / is not null 大概率失效

·全表数据差异极小(如性别),MySQL 优化器放弃索引

3.索引的分类                                                                         

MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。

功能逻辑上说,索引主要有4种,分别是普通索引、唯一索引、主键索引、全文索引

按照物理实现方式,索引可以分为2种:聚簇索引和非聚簇索引

按照作用字段个数进行划分,分成单列索引和联合索引。

4.聚簇索引

(1)什么是聚簇索引

聚簇索引:聚簇索引 = 索引结构和数据存放在一起的索引。

叶子节点存的是整行数据;一张表只能有一个聚簇索引

InnoDB 默认就是聚簇索引组织表

非聚簇索引:非聚簇索引 = 索引和数据分开存放的索引。

(2)聚簇索引的优缺点

优点

按主键查询极快,直接找到整行数据

范围查询、排序非常快

节省空间(数据和索引不分离)

缺点

插入无序主键会造成页分裂,性能变差

主键不宜过长(因为二级索引都会存主键)

一张表只能一个,无法多建