数据库09——索引2

152 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

索引的分类?

  • 唯一索引 UNIQUE:可以避免表中某列的值重复,但允许有空值;
  • 主键索引 PRIMARY KEY:针对主键创建的索引,是一种特殊的唯一索引,不允许空值(MySQL创建主键时默认为聚集索引,但主键也可以是非聚集索引);
  • 常规索引:用于快速定位特定数据
  • 全文索引:会查找文本中的关键字,而不是比较索引的值
  • 分区索引、复合索引、覆盖索引、虚拟索引
  • 虚拟索引(Virtual):模拟索引的存在而不用真正创建一个索引,用于快速测试创建索引对执行计划的影响。没有相关的索引段,不增加存储空间的使用

InnoDB中,又可分为聚集索引二级索引

  • 聚集索引:会重新组织数据的物理地址,使数据的物理排序和索引排序一致,叶子结点存储整行数据

优点查询速度快,因为可以直接按照索引顺序得到数据的物理地址,对范围搜索更有效

缺点修改的速度较慢

  • 二级索引:二级索引叶子结点存储数据的主键聚集索引的叶子结点存整行数据

回表查询:查询时,例如查询条件是where name="lucy",若name字段建立了二级索引,会先通过二级索引找到主键再到聚集索引中通过主键取数据,这个过程就是回表查询。

创建索引

创建索引时需要注意什么?

数据不要太大,不为空

  • 只应建立在小字段上,而不对大文本或图片建立索引(数据越大,一页存储的数据越少,一次IO操作获取的数据越少,效率越低);
  • 建立索引的字段应该非空,应该用0特殊值或者空串代替NULL。在MySQL中,含有空值的列很难进行查询优化,因为它们使得索引、索引的统计信息、比较运算都更加复杂。

哪些地方适合创建索引?

数据密度大,最值、查询、连接,(排序、分组、去重)

  • 选择数据密度大(唯一值占总数的百分比很大)的字段作索引
  • 经常作为最大最小值的字段
  • 经常被查询的字段
  • 经常用作表连接的字段
  • 经常出现在ORDER BY/GROUP BY/DISDINCT后面的字段 (排序 分组 去重);