金三银四面试题(十八):MySQL索引

发布于:2024-04-11 ⋅ 阅读:(32) ⋅ 点赞:(0)

今天我们继续盘点那些高频的MySQL面试题。

什么是索引

官方介绍索引是帮助MySQL 高效获取数据的数据结构。更通俗地说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。

一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往是存储在磁盘上的文件中的(可能存储在单独的索引文件中,也可能和数据一起存储在数据文件中)。

我们通常所说的索引,包括聚集索引、覆盖索引、组合索引、前缀索引、唯一索引等,没有特别说明,默认都是使用树结构组织(多路搜索树,并不一定是二叉的)的索引。

索引优缺点

优点

提高数据的检索速度,降低数据库IO成本。使用案引的意义就是通这缩小表中需要查询的记录的数目从而加快搜索的速度。

降低数据排序的成本,降低CPU消耗,素引之所以查的快是因为先将数据排好序,若该字段正好需要排序,则正好降低了排序的成本。

缺点

占用存储空间:索引实际上也是一张表,记录了主键与索引字段
一般以索引文件的形式存储在磁盘上。

阵低更新表的速度:表的数据发生了变化,对应的素引也需要一起变更
从而减低的更新速度。否则索引指向的物理数据可能不对,这也是索引失效的原因之一

结合以上优缺点,我们可以判断什么时候不需要索引?

  1. 经常增删改的列不要建立索引;
  2. 有大量重复的列不建立索引;
  3. 表记录太少不要建立索引。

MySQL索引有哪些类型

  • 主键索引

索引列中的值必须是唯一的,不允许有空值。

  • 普通索引

MySQL 中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值。

  • 唯一索引

索引列中的值必须是唯一的,但是允许为空值。

  • 全文索引

只能在文本类型CHAR,VARCHAR,TEXT 类型字段上创建全文索引。字段长度比较大时,如果创建
普通索引,在进行like 模糊查询时效率比较低,这时可以创建全文索引。MyISAM 和InnoDB
中都可以使用全文索引。

  • 空间索引

MySQL 在5.7 之后的版本支持了空间索引,而且支持OpenGIS 几何数据模型。MySQL 在空间索引这方面遵循OpenGIS 几何数据模型规则。

  • 前缀索引

在文本类型如CHAR,VARCHAR,TEXT 类列上创建索引时,可以指定索引列的长度,但是数值类型
不能指定。

主键和索引的区别

主键一定会创建一个唯一索引,但是有唯一索引的列不一定是主键;

主键不允许为空值,唯一索引列允许空值;

一个表只能有一个主键,但是可以有多个唯一索引;

主键可以被其他表引用为外键,唯一索引列不可以;

主键是一种约束,而唯一索引是一种索引,是表的冗余数据结构。

往期文章

金三银四面试题(十七):MySQL面试都问什么(2)2024-04-07

金三银四面试题(十六):MySQL面试都问什么(1)2024-04-07

金三银四面试题(十六):MySQL面试都问什么(1)2024-04-06

在这里插入图片描述