万里长征-04-脉脉

type
status
date
slug
summary
tags
category
icon
password
以下内容基于GPT-4o模型

问题

1.MySQL查询如何优化

GPT问答

MySQL查询如何优化
优化 MySQL 查询可以从多个方面入手,包括查询设计索引使用数据库结构配置调整等。下面是一些常见的优化策略:
尽量不要使用 SELECT *,而是明确指定需要的列,减少不必要的数据传输。
尽量使用 WHERE 子句减少返回的数据量。
如果只需要前 N 条记录,可以使用 LIMIT
尽量避免在 WHERE 子句中使用函数操作,因为这可能导致索引失效。
覆盖索引包含了查询所需的所有列,避免了回表操作。
使用 EXPLAIN 检查查询使用了哪些索引,并分析查询计划。
对于大表,可以考虑使用分区表来提高性能。
调整 innodb_buffer_pool_size 等参数,提高内存使用效率。
根据实际需求调整最大连接数 max_connections
定期执行 ANALYZE TABLEOPTIMIZE TABLE
合理使用事务,避免长时间占用锁资源。

 
ANALYZE OPTIMIZE 这两个语句有啥用
ANALYZE TABLEOPTIMIZE TABLE 是 MySQL 提供的用于维护和优化表的两种重要命令。它们在不同的方面帮助提高数据库的性能和效率。
ANALYZE TABLE 命令用于更新表的统计信息。优化器使用这些统计信息来生成查询执行计划,从而选择最优的查询路径。
  • 更新表的索引统计信息。
  • 帮助优化器选择最优的索引和查询路径。
  • 当表中有大量数据插入、更新或删除操作后,统计信息可能会变得不准确,这时需要重新分析表。
  • 当查询性能下降,优化器可能无法选择最佳索引时,可以使用 ANALYZE TABLE 来更新统计信息。
OPTIMIZE TABLE 命令用于重组织表的数据和索引。这对于定期维护表的性能非常有用,尤其是在大量数据删除或更新操作后。
  • 重建表和索引,释放未使用的空间。
  • 压缩表和索引,提高访问效率。
  • InnoDB 表,效果类似于 ALTER TABLE ... ENGINE=InnoDB,会进行表的重建。
  • 当表中有大量的数据插入、删除或更新操作后,可能会产生碎片,导致查询性能下降,这时可以使用 OPTIMIZE TABLE
  • 定期维护表的性能,尤其是对于写操作频繁的表。
区别和联系
  • ANALYZE TABLE 主要是更新统计信息,帮助优化器选择最佳的查询路径。
  • OPTIMIZE TABLE 主要是重组织表和索引,释放未使用的空间并压缩数据。
这两个命令可以配合使用,以保持表的高效运行。一般来说,ANALYZE TABLE 可以更频繁地使用,而 OPTIMIZE TABLE 可以定期使用,特别是在进行大量数据操作之后。

总结

  • 查询优化就是索引
  • 不要用函数,覆盖索引这些,还有qps大的接口能走联合索引要搞
  • 前缀匹配是优化磁盘的时候考虑,数据量小就别考虑了
  • ANALYZEOPTIMIZE在数据大规模增加删除的时候有用

2.MySQL的 ACID理解,如何保证的,MySQL底层架构是啥

GPT问答

MySQL的 ACID理解,如何保证的
MySQL 是一种关系型数据库管理系统,它通过实现 ACID(Atomicity, Consistency, Isolation, Durability)属性来确保事务处理的可靠性和数据的完整性。以下是对 ACID 属性的理解以及 MySQL 如何保证这些属性:
原子性确保事务中的所有操作要么全部完成,要么全部不完成。如果事务中的任何操作失败,则整个事务回滚到最初状态。
如何保证: MySQL 使用事务日志(如 InnoDB 的 redo log 和 undo log)来实现原子性。
  • Redo Log 记录了修改的数据,用于在系统崩溃后恢复数据。
  • Undo Log 记录了事务的反向操作,用于在事务失败时回滚。
当一个事务开始时,MySQL 会记录开始点,并在事务提交前将所有操作记录到日志中。如果事务失败,则 MySQL 使用 undo log 回滚所有更改。
一致性确保事务将数据库从一个一致状态转换到另一个一致状态。事务开始前和结束后,数据库的所有规则(如约束、触发器等)必须保持有效。
如何保证: MySQL 通过以下方式保证一致性:
  • 数据库约束(如主键、外键、唯一性约束等)。
  • 触发器和存储过程在事务中进行检查。
  • 使用 ACID 其他三个属性(原子性、隔离性、持久性)来共同维护一致性。
 
隔离性确保多个事务并发执行时,不会互相干扰。隔离级别决定了一个事务对其他事务的可见程度。
如何保证: MySQL 提供了四种隔离级别,以平衡性能和并发性:
  • Read Uncommitted:事务可以读取未提交的数据(脏读)。
  • Read Committed:事务只能读取已提交的数据(避免脏读)。
  • Repeatable Read:事务在开始时看到的数据在整个事务中保持一致(避免不可重复读,InnoDB 默认隔离级别)。
  • Serializable:最高隔离级别,事务完全串行化执行(避免幻读)。
InnoDB 存储引擎通过多版本并发控制(MVCC)和行锁来实现这些隔离级别。
持久性确保事务一旦提交,其结果是永久性的,即使发生系统崩溃或电源故障,数据也不会丢失。
如何保证: MySQL 通过以下方式实现持久性:
  • 使用 redo log 来记录事务的变化。这些日志在事务提交时同步到磁盘。
  • InnoDB 的 doublewrite buffer 技术确保数据页写入磁盘时的一致性。
  • 定时将内存中的数据页刷新到磁盘(通过 checkpoint 机制)。
总结起来,MySQL 通过事务日志、数据库约束、多版本并发控制、行锁以及定期的数据刷新等技术手段来实现 ACID 属性,以确保数据的可靠性和一致性。

 

3.Redis的几个基本数据类型,底层实现

GPT问答

1
1

4.RabbitMQ工作的几种不同模式,数据如何保证顺序性跟不丢失,如何避免数据重复消费

GPT问答

1
1

5.Linux 常见指令(说点高级指令比如tmux,awk,别扯 ls、cd)

GPT问答

1
1

6.MySQL为什么不建议用Text

GPT问答

1
1
 
 

7.MySQL limit 10W,10 这样的优化,覆盖索引的使用

GPT问答

1
1
 
 

8.Linux CPU满负荷如何排查

GPT问答

1
1
 
 

9.链表是否有环, 如何找到交点,计算出环的大小

GPT问答

1
1
 

10.一个字符串中的最长无重复子串

GPT问答

1
1
 
 

11.一个帖子来回回复如何存储,如何设计

GPT问答

1
1
 

12.一个数组包含10W个数据,数据范围都在0~100,请求出两数相加和为100的情况一共多少种

GPT问答

1
1
 

13.分布式锁实现方案

GPT问答

1
1
 
 

14.Redis为什么那么快,Redis底层实现

GPT问答

1
1
 
 

15.RabbitMQ 中的TTL

GPT问答

1
1
 
 

16.Redis中常见集群部署情况,出现性能问题如何排查

GPT问答

1
1
 
 

写到最后

notion image
是在往前走就好 bothsavage.github.io
 
notion image
 
Java程序员学习Go开发Higress的WASM插件万里长征-03-搜狐