MySQL基础知识(三)

news/2024/9/29 0:29:18/

1. 存储过程

存储过程是基于SQL语言的过程化编程扩展,允许将一系列SQL语句封装为一个可执行的程序。通过这种方式,可以提高执行效率,因为存储过程在编译后只需通过调用和参数传递来使用,而无需每次执行时都进行解析和编译。这种特性使得存储过程在处理复杂的业务逻辑和多次重复执行的数据库操作中非常有效。

2. 多版本并发控制(MVCC)

MVCC是一种避免锁机制以提高数据读取效率的方法。它通过保持数据的多个版本来解决线程安全问题,从而允许多个事务并发执行。在MVCC中:

  • Undo Log:记录数据修改前的状态,支持事务的回滚。
  • 版本链:用于跟踪数据的不同版本。
  • Read View:确保事务在读取数据时能够访问到有效的快照。

3. COUNT函数的性能比较

在MySQL中,COUNT(*)COUNT(1)的性能是相同的,通常优于COUNT(主键),而COUNT(字段)会排除NULL值。性能排序如下:

  • COUNT(*) = COUNT(1) > COUNT(主键) > COUNT(字段)

  • COUNT(name):统计字段name不为NULL的记录数。

  • COUNT(1):统计表中总记录数,包括NULL值。

  • COUNT(*):统计总记录数,包括NULL。

  • COUNT(主键):只统计主键列的数量,效率较低。

4. 回表

在使用索引进行查询时,若索引字段未能完全满足查询条件,MySQL将需要通过索引查找后再访问实际数据表进行数据的完整读取,这个过程称为“回表”。虽然使用索引可以加速查询,但回表的过程可能会影响性能。

5. 删除重复数据

在MySQL中,可以通过使用GROUP BY结合HAVING语句、使用临时表或子查询来实现删除重复数据,只保留一条。例如:

sql">DELETE t1 FROM table_name t1
INNER JOIN table_name t2 
WHERE t1.id > t2.id AND t1.duplicate_column = t2.duplicate_column;

6. MySQL性能调优

  1. 缓存调优:调整缓冲池大小,引入Redis等缓存机制。
  2. 硬件升级:增加内存和使用SSD等快速存储设备。
  3. 垃圾清理:定期清理不再使用的表、数据和缓存,释放资源。
  4. 选择合适的引擎:例如MyISAM适合读多写少的场景,而InnoDB适合并发写入。
  5. 读写分离:通过主从同步提高读性能。
  6. 数据迁移:采用停机迁移和不停机迁移(增量与全量同步)。

7. MySQL日志机制

  • Binlog:记录数据库的写操作,以二进制格式存储,支持逻辑恢复。
  • Redo Log:记录数据页的修改,以实现故障恢复,属于物理日志。
  • Undo Log:用于实现事务的原子性,保存数据修改前的状态,支持回滚操作。

8. 慢查询

慢查询是指执行时间超过long_query_time参数设定的阈值(例如10秒)的查询。慢查询会被记录在慢查询日志中,以便于后期优化。

9. SQL调优手段

  1. 合理使用索引
  2. 优化查询语句:使用EXPLAIN分析执行计划,避免全表扫描等。
  3. 调整服务器硬件配置:提高CPU、扩展内存、使用高速磁盘。
  4. 定期维护数据库:保障数据完整性,进行备份和清理。
  5. 合理分配资源与连接管理
  6. 使用缓存技术:如Redis,缓存热点数据以降低数据库压力。
  7. 数据分区与分表:将大型数据集分散到多个表和库中以提高查询性能。
  8. 负载均衡技术:如主从同步,分散请求压力,提高并发性能。
  9. 优化数据库设计:遵循三范式,避免数据冗余。
  10. 监控性能和调优

10. SQL执行顺序

SQL语句的执行顺序为:

FROM > ON > JOIN > WHERE > GROUP BY > AGG_FUNC > HAVING > SELECT > DISTINCT > ORDER BY > LIMIT

11. DISTINCT与GROUP BY的区别

  • DISTINCT:用于消除查询结果中的重复记录。
  • GROUP BY:用于将结果集中的数据进行分组,通常与聚合函数一起使用。

12. B+树的层数计算

在假设的条件下,计算B+树的层数(假设100万条记录):

  • 一页大小为16KB,每个指针和主键占用的空间为14字节(8字节主键 + 6字节指针)。
  • 每页存储的指针数为 16*1024 / 14 ≈ 1170
  • 假设每页能存储16条记录,则可以推算出树的层数。

13. 数据库三范式

  1. 第一范式:每个字段都是原子的。
  2. 第二范式:满足第一范式且每行数据必须可唯一识别。
  3. 第三范式:非主属性必须直接依赖于主键,不能依赖于其他非主属性。

14. SQL约束

  1. NOT NULL:字段内容不能为空。
  2. UNIQUE:字段不能重复。
  3. PRIMARY KEY:标识主键。
  4. FOREIGN KEY:表与表之间的连接。
  5. CHECK:控制字段值的范围。

15. DROP、DELETE、TRUNCATE的区别

  • DELETE:按条件删除数据,可回滚,速度较慢。
  • TRUNCATE:删除表中所有数据,表结构不变,速度快且不可回滚。
  • DROP:删除整个表,包括索引和权限,不可回滚,速度最快。

16. 分库分表

  • 分表:将一个表的数据分散到多个表中,减少单表负担。
  • 分库:将数据库拆分到多个数据库中,增加并发处理能力。

17. 垂直与水平拆分

  • 水平拆分:将同一表的数据分散到多个表中,但表结构一致。
  • 垂直拆分:将一个表拆分成多个表,每个表包含部分字段。

18. 主从同步与读写分离

主从同步通过在主数据库上执行写操作,并将数据同步到从数据库,实现读写分离,提高性能及数据安全。

19. MySQL数据存储结构

MySQL通过使用不同的存储引擎来存储和管理数据,支持高效的读写操作,满足多种业务需求。


http://www.ppmy.cn/news/1531132.html

相关文章

物理学基础精解【7】

文章目录 平面方程直角坐标及基本运算线段的定比分点一、定义二、坐标公式三、特殊情况四、应用举例五、推导过程(简要)两直线的交点和两曲线的交点两直线的交点两曲线的交点例题:求两直线的交点例题:求两曲线的交点 参考文献 平面…

Linux之我不会

一、常用命令 1.系统管理 1.1 systemctl start | stop | restart | status 服务名 案例实操 1 查看防火墙状态 systemctl status firewalld2 停止防火墙服务 systemctl stop firewalld3 启动防火墙服务 systemctl start firewalld4 重启防火墙服务 systemctl restart f…

Django1.5自定义User模型

#Django1.5自定义User模型 Django1.5自定义用户profile可谓简单很多,编写自己的model类MyUser,MyUser至少要满足如下要求: 必须有一个整型的主键有一个唯一性约束字段,比如username或者email,用来做用户认证提供一种方…

CSS布局中的定位

一、position 1.static position: static; 默认值,没有定位2 .relative 相对定位:相对自身原来的位置进行偏移 偏移设置:top、left、right、bottom 相对定位元素的规律: 设置相对定位的盒子会相对于它原来的位置,通…

Java Stream流编程入门

流式编程 stream流式编程分为 首先转化为stream中间函数的链接最后的终结函数 怎么转化为stream 单列集合 List<String> list new ArrayList<String>(); Collections.addAll(list,"1","2","3","4","5","…

智能手机取证: 专家如何从被锁定设备中提取数据?

在数字取证领域&#xff0c;从被锁定的手机中检索数据的能力是决定调查成功与否的关键技能。由于智能手机往往是解决复杂案件的关键&#xff0c;智能手机取证已经成为打击犯罪和恐怖主义战争中的一个关键组成部分。通话记录、短信、电子邮件&#xff0c;甚至位置数据都可能被发…

golang如何把微信支付结构体拼接为对参数按照key=value的格式,并按照参数名ASCII字典序排序

推荐学习文档 golang应用级os框架&#xff0c;欢迎stargolang应用级os框架使用案例&#xff0c;欢迎star案例&#xff1a;基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识&#xff0c;这里有免费的golang学习笔…

Django Web开发基础介绍

概述 Django 是后端Python的 Web 开发框架&#xff0c;主要任务是处理与服务器和数据库相关的事务&#xff0c;模板渲染动态生成网页内容只是其中一部分。 Django 内置了的模板引擎&#xff0c;可以将 HTML 页面与 Python 代码进行分离。模板引擎提供了丰富的模板标签和过滤器…