MySQL 面试题合集(索引篇)

🎈每日定期分享 | 面试求职经验 | 个人成长

开篇寄语
面试不必死记硬背,带着GPT去面试简直降维打击!

为您推荐一款颠覆性的GPT面试助手软件:“会议面试精灵”。这款工具能够实时分析语音内容、智能识别面试问题并生成精准答案,让您轻松应对八股文题目,从容处理各类复杂面试问题。
毕竟八股文在工作中很少使用,仅作为面试的筛选工具,不值得投入过多的精力。

如何获取“会议面试精灵”?
- 直接访问下载链接:https://www.interviewpass.fun/
- 在搜索引擎中输入关键词:“会议面试精灵”(记得加上双引号)进行搜索。


目录

1、什么是索引?

2、索引分别有哪些优点和缺点? 

3、为什么 MySQL 官方建议使用自增主键作为表的主键?

4、自增主键有哪些优缺点? 

5、索引有几种类型?

6、主索引和唯一索引有什么区别?

7、在 InnDB 中主键索引为什么比普通索引的查询性能高?

8、什么叫回表查询?

9、如何查询一张表的所有索引?

10、MySQL 最多可以创建多少个索引列?

11、如何让 like %abc 走索引查询?

12、MySQL 联合索引应该注意什么?

13、联合索引的作用是什么? 

14、什么是最左匹配原则?它的生效原则有哪些?

15、列值为 NULL 时,查询会使用到索引吗?

15、以下语句会走索引么?

16、能否给手机号的前 6 位创建索引?如何创建?

17、什么是前缀索引?

18、为什么要用前缀索引?

19、什么情况下适合使用前缀索引?

20、什么是页?

21、索引的常见存储算法有哪些?

22、InnoDB 为什么要使用 B+ 树,而不是 B 树、Hash、红黑树或二叉树?

23、为什么 InnoDB 要使用 B+ 树来存储索引?

24、唯一索引和普通索引哪个性能更好?

25、MySQL 是如何判断索引扫描行数的多少?

26、MySQL 是如何得到索引基数的?它准确吗?

27、MySQL 如何指定查询的索引?

28、在 MySQL 中指定了查询索引,为什么没有生效?

29、以下 or 查询有什么问题吗?该如何优化?

30、以下查询要如何优化? 表中包含索引:

31、MySQL 会错选索引吗?

32、如何解决 MySQL 错选索引的问题?

33、如何优化身份证的索引?​​​​​​​


1、什么是索引?

索引是一种能帮助 MySQL 提高查询效率的数据结构。

2、索引分别有哪些优点和缺点? 

索引的优点如下:

- 快速访问数据表中的特定信息,提高检索速度。

- 创建唯一性索引,保证数据表中每一行数据的唯一性。

- 加速表与表之间的连接。

- 使用分组和排序进行数据检索时,可以显著减少查询中分组和排序的时间。

索引的缺点:

- 虽然提高了的查询速度,但却降低了更新表的速度,比如 update、insert,因为更新数据时,MySQL 不仅要更新数据,还要更新索引文件;

- 建立索引会占用磁盘文件的索引文件。

使用索引注意事项:

- 使用短索引,短索引不仅可以提高查询速度,更能节省磁盘空间和 I/O 操作;

- 索引列排序,MySQL 查询只使用一个索引,因此如果 where 子句中已经使用了索引的话,那么 order by 中的列是不会使用索引的,因此数据库默认排序可以符合要求的情况下,不要进行排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引;

- like 语句操作,一般情况下不鼓励使用 like 操作,如果非使用不可, 注意 like "%aaa%" 不会使用索引,而- - like "aaa%"可以使用索引;

- 不要在列上进行运算;

- 不适用 NOT IN 和 <> 操作。 ###以下 SQL 有什么问题?该如何优化?

select * from t where f/2=100;

该 SQL 会导致引擎放弃索引而全表扫描,尽量避免在索引列上计算。可改为:

select * from t where f=100*2;

3、为什么 MySQL 官方建议使用自增主键作为表的主键?

因为自增主键是连续的,在插入过程中尽量减少页分裂,即使要进行页分裂,也只会分裂很少一部分;并且自增主键也能减少数据的移动,每次插入都是插入到最后,所以自增主键作为表的主键,对于表的操作来说性能是最高的。

4、自增主键有哪些优缺点? 

优点:

  • 数据存储空间很小;

  • 性能最好;

  • 减少页分裂。

缺点:

  • 数据量过大,可能会超出自增长取值范围;

  • 无法满足分布式存储,分库分表的情况下无法合并表;

  • 主键有自增规律,容易被破解;

综上所述

        是否需要使用自增主键,需要根据自己的业务场景来设计。

        如果是单表单库,则优先考虑自增主键,如果是分布式存储,分库分表,则需要考虑数据合并的业务场景来做数据库设计方案。

5、索引有几种类型?

分别如何创建? MySQL 的索引有两种分类方式:逻辑分类和物理分类。 按照逻辑分类,索引可分为:

  • 主键索引:一张表只能有一个主键索引,不允许重复、不允许为 NULL;

  • 唯一索引:数据列不允许重复,允许为 NULL 值,一张表可有多个唯一索引,但是一个唯一索引只能包含一列,比如身份证号码、卡号等都可以作为唯一索引;

  • 普通索引:一张表可以创建多个普通索引,一个普通索引可以包含多个字段,允许数据重复,允许 NULL 值插入;

  • 全文索引:让搜索关键词更高效的一种索引。

按照物理分类,索引可分为:

  • 聚集索引:一般是表中的主键索引,如果表中没有显示指定主键,则会选择表中的第一个不允许为 NULL 的唯一索引,如果还是没有的话,就采用 Innodb 存储引擎为每行数据内置的 6 字节 ROWID 作为聚集索引。每张表只有一个聚集索引,因为聚集索引的键值的逻辑顺序决定了表中相应行的物理顺序。聚集索引在精确查找和范围查找方面有良好的性能表现(相比于普通索引和全表扫描),聚集索引就显得弥足珍贵,聚集索引选择还是要慎重的(一般不会让没有语义的自增 id 充当聚集索引);

  • 非聚集索引:该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同(非主键的那一列),一个表中可以拥有多个非聚集索引。

各种索引的创建脚本如下:

-- 创建主键索引
alter table t add primary key add (`id`);
-- 创建唯一索引
alter table t add unique (`username`);
-- 创建普通索引
alter table t add index index_name (`username`);
-- 创建全文索引
alter table t add fulltext (`username`);

6、主索引和唯一索引有什么区别?

- 主索引不能重复且不能为空,唯一索引不能重复,但可以为空;

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

- 主索引的查询性能要高于唯一索引。

7、在 InnDB 中主键索引为什么比普通索引的查询性能高?

因为普通索引的查询会多执行一次检索操作。比如主键查询 select * from t where id=10 只需要搜索 id 的这棵 B+ 树,而普通索引查询 select * from t where f=3 会先查询 f 索引树,得到 id 的值之后再去搜索 id 的 B+ 树,因为多执行了一次检索,所以执行效率就比主键索引要低。

8、什么叫回表查询?

普通索引查询到主键索引后,回到主键索引树搜索的过程,我们称为回表查询。

参考SQL:

mysql> create table T(
id int primary key, 
k int not null, 
name varchar(16),
index (k))engine=InnoDB;

如果语句是 select * from T where ID=500,即主键查询方式,则只需要检索主键 ID 字段。

mysql>  select * from T where ID=500;
+-----+---+-------+
| id  | k | name  |
+-----+---+-------+
| 500 | 5 | name5 |
+-----+---+-------+

如果语句是 select * from T where k=5,即普通索引查询方式,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值