欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > mysql高频面试题

mysql高频面试题

2025/5/7 3:51:16 来源:https://blog.csdn.net/suzimuyu99/article/details/144749004  浏览:    关键词:mysql高频面试题

1. mysql里的索引类型

在这里插入图片描述

2. 聚簇索引和非聚簇索引的区别

在这里插入图片描述

  • 聚簇索引适合场景:
    • 主键、唯一性要求高的字段。
    • 需要对数据进行范围查询时。
    • 对数据的读取频繁,并且数据行的插入和删除较少时。
  • 非聚簇索引适合场景:
    • 较多的查询条件,或者需要基于某些非主键字段进行查询时。
    • 需要创建多个索引来优化不同的查询条件。
    • 需要增加查询速度,但数据插入、删除操作频繁时。
      在这里插入图片描述
  1. AB, id, name, 查出A表中存在,在B表里不存在的所有数据

select * from A left join B on A.name= B.name WHERE B.name IS NULL ;

SELECT  A.id, A.name
FROM  A
WHERE  NOT  EXISTS  (SELECT  1FROM  BWHERE  A.id =  B.id
);

3. Mysql锁的机制了解吗?

  • 全局锁:

  • 表级锁:

    • 表锁
    • 元数据锁
    • 意向锁
    • Auto-INC 锁
  • 行级锁

    • Record 锁
    • Gap 锁
    • Next-Key Lock

4. 假设我有一个千万级的数据表,我要在生产环境下加索引

5.1 使用 ONLINE 选项(如果支持)

  • MySQL 5.6 及以上版本支持使用 ONLINE 选项创建索引,可以在不锁定表的情况下创建索引。这有助于避免对查询和插入的干扰。

CREATE INDEX idx_column_name ON table_name (column_name) ONLINE;

5.2 分批次创建索引

如果表非常大,可以考虑分批次创建索引。假设表的数据分布有一定规律,可以将数据分成多个部分,逐步进行索引创建。

步骤:

  • 可以通过分区表(Partitioning)或根据某些条件(如日期、范围)选择性地创建索引。
  • 创建索引时使用 ALGORITHM=INPLACE,可以减少表的锁定时间。

5.3 低流量时段执行索引创建

在生产环境中,通常有低流量时段。可以通过定时任务在低峰期执行索引创建。

5.4 逐步添加索引

对于已经有索引的大表,逐步添加索引可以避免一次性创建多个索引造成的负载过高。每次添加一个索引后,评估系统性能,确保没有重大性能瓶颈后再添加下一个。

5.5 使用 pt-online-schema-change 工具

Percona Toolkit 提供的 pt-online-schema-change 工具可以在不中断服务的情况下安全地对表结构进行更改(如创建索引)。该工具通过创建一个新的表来实现更改,并通过触发器同步数据,这样对生产环境的影响较小。

pt-online-schema-change --alter “ADD INDEX idx_column_name (column_name)” D=your_db,t=your_table --execute

5. 千万级表,保证性能的前提下,才能保证sql是否用到索引。

1. 确保查询语句使用索引

1.1 条件多个时,使用覆盖索引

覆盖索引(Covering Index)是指查询中的所有字段都可以通过索引来访问,而不需要回表(即不需要再访问数据表中的行)。如果查询能够通过索引覆盖完成,它的性能会非常高。

覆盖索引的前提:索引包含了所有查询字段,包括 SELECT 中的字段、WHERE 条件中的字段、JOIN 语句中的字段、ORDER BY 排序的字段等。

CREATE INDEX idx_column1_column2 ON your_table (column1, column2);

SELECT column1, column2 FROM your_table WHERE column1 = ‘value1’ AND column2 = ‘value2’;

column1 和 column2通过覆盖索引就能完成查询,而不需要访问表中的实际数据行。

1.2 使用合适的索引

确保查询条件中的字段有相应的索引。常见的情况包括:

  • WHERE 子句中经常查询的字段。
  • JOIN 连接条件中的字段。
  • ORDER BY 排序的字段。
  • GROUP BY 聚合的字段。

你可以根据实际的查询情况,使用单列索引或复合索引。复合索引尤其有效于多条件查询。

2. 验证查询是否使用索引 - EXPLAIN

使用 EXPLAIN(或 EXPLAIN ANALYZE)来分析查询的执行计划,查看查询是否有效使用了索引。

2.1 使用 EXPLAIN

EXPLAIN SELECT column1, column2 FROM your_table WHERE column1 = ‘value1’ AND column2 = ‘value2’;

+----+-------------+------------+--------+----------

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词