mysql索引面试题

是帮助数据库高速获取数据的数据结构

索引的作用主要体现在以下几个方面:

1.提高查询:索引可以大大减少数据库的扫描操作,通过直接定位到需要查询的数据位置,提高查询效率

2.加速排序:索引可以帮助数据库在进行排序操作时,快速定位到排序的数据位置,提高排序的效率。

3.加速连接:当数据库进行连接操作时,索引可以帮助快速定位到连接的数据,提高连接的效率

4.保证数据的唯一性:通过在索引上添加唯一约束,可以保证数据的唯一性,避免出现重复数据.

索引的分类:

MySQL中常见的索引类型包括主键索引、唯一索引、普通索引和全文索引,联合索引.

1.主键索引:

主键索引是一种特殊的唯一索引,它要求索引键的值唯一且不能为空。主键索引在数据库中起到唯一标识数据的作用,可以保证数据的唯一性

2.唯一索引:

唯一索引要求索引键的值唯一,但可以为空,唯一索引可以提高查询的效率,同时保证数据的唯一性。

3.普通索引:

普通索引是最基本的索引类型,它没有任何限制,可以包含重复的值和空值。普通索引可以提高查询的效率,但不能保证数据的唯一性。

4.全文索引:全文索引是一种特殊的索引类型,它可以用于全文搜索。全文索引可以提高搜索的效率,适用于对文本内容进行查询的场景。

5.联合索引:

在联合索引中,如果想要索引,需要按照建立索引的字段顺序挨个使用,否则无法命中索引。所以,我们在建立联合索引的时候,一定要把最常用的列放在最左边。遵循最左原则

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

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

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

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

MySQL中常用的索引底层数据结构:

主要有B+树和哈希索引。B+树是一种多路平衡搜索树,能够保持数据有序,适合范围查找;哈希索引则是通过哈希函数将索引列的值映射到索引表中,适合等值查找

InnoDB和MyISAM是Mysql的两种存储引擎,所谓存储引擎,就是数据文件的组织方式,其最大的不同,就是数据存储的结构和方式不一样。InnoDB采用聚簇索引来存储数据,MyISAM采用非聚簇索引。

也就是说,InnoDB的索引和数据是关联在一起的,在B+树的根节点,而MyISAM的key-value存的是key和地址指针,其真正的文件存在于其他位置。

聚簇索引并不是一种单独的索引类型,而是一种数据存储方式。具体细节依赖于其实现方式。

MySQL数据库中innodb存储引擎,B+树索引可以分为聚簇索引(也称聚集索引,clustered index)和辅助索引(有时也称非聚簇索引或二级索引,secondary index,non-clustered index)。这两种索引内部都是B+树,聚集索引的叶子节点存放着一整行的数据。

Innobd中的主键索引是一种聚簇索引,非聚簇索引都是辅助索引,像复合索引、前缀索引、唯一索引。

Innodb使用的是聚簇索引,MyISam使用的是非聚簇索引

MyISAM:每个IyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件的扩展名为.IYD MYData)。索引文件的扩展名是.MYI (MYIndex)。

InnoDB:所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限于操作系统文件的大小,一般为2GB。

B+树种上面是非叶子节点 不保存数据

只用来查找 叶子节点用来保存数据 使用二分查找来查找数据 通常三次就可以查询到结果

回表是指通过查询索引获得记录的主键,然后再通过主键查询数据表获取完整记录的过程。在使用查询索引查询时,如果的字段不在索引中,那么查询结果只包含索引字段,需要通过查询结果中的主键再次查询数据表才能得到完整记录。这个过程就被称为回表。回表会增加查询的时间和资源消耗,应尽量避免。

索引下推是一种优化技术,它将 WHERE 子句中的条件下推到索引层级,减少数据读取的行数,从而提高查询效率。

索引下推是指在使用联合索引时,将过滤条件下推到索引层,从而减少回表的次数

索引条件下推(Index Condition Pushdown,ICP),就是过滤的动作由下层的存储引擎层通过使用索引来完成,而不需要上推到Server层进行处理。在 MySQL 中,如果索引中包含WHERE 子句中的所有条件,就可以使用索引下推来优化查询。覆盖索引是指索引能够覆盖查询的所有字段,查询结果可以直接从索引中获得,而不需要回表查询数据表。当查询需要返回的字段都被包含在索引中时,可以使用覆盖索引来避免回表查询,从而提高查询效率

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值