当前位置: 首页 > news >正文

数据库复习

一、SQL执行顺序

from -> join -> where -> group by -> having -> select -> distinct -> order by -> limit

二、常见的联合查询方式

  1. INNER JOIN:返回交集数据

  2. LEFT JOIN:保留左表全部记录

  3. RIGHT JOIN:保留右表全部记录

  4. CROSS JOIN:笛卡尔积

  5. UNION:合并结果集(自动去重)

三、MySQL存储引擎对比

引擎事务支持锁粒度外键试用场景
InnoDB支持行级锁支持高并发事务处理
MyISAM不支持表级锁不支持读多写少,全文索引
Memory不支持表级锁不支持临时数据缓存

四、InnoDB选择B+树的原因

  • 层级更低:相比B树,B+树非叶子节点不存数据,使得同样数据量下树高更低

  • 范围查询高效:叶子节点形成链表,适合范围扫描

  • 磁盘IO优化:每个节点存储更多指针,减少磁盘访问次数

五、InnoDB引擎的存储过程

InnoDB 通过内存池管理数据缓存,使用 B+树 组织索引

数据写入流程:

写入操作

    数据修改先写入内存池 中的页(Page)。

    同时保证持久性和 事务回滚。

 刷盘机制

    Checkpoint 机制:定期将脏页(修改后的页)刷新到磁盘。防止页写入不完整的问题。

 事务提交

六、 drop、delete、truncate的区别

命令类型是否可回滚重置自增ID执行速度场景
dropDDL最快彻底删除表
truncateDDL较快清空表并释放空间
deleteDML最慢条件删除数据

七、 索引失效的八大场景

  1. 隐式类型转换WHERE name = 123(name为字符串类型)

  2. 左模糊查询WHERE content LIKE '%abc'

  3. OR连接非索引列WHERE a=1 OR b=2(仅a有索引)

  4. 函数操作字段WHERE YEAR(create_time) = 2023

  5. 联合索引违反最左前缀:索引(a,b,c)时查询WHERE b=2

  6. 数据倾斜严重:某值出现频率超过30%

  7. 使用不等于(!=/<>)

  8. 参数化查询类型不匹配

八、 索引回表与避免策略

回表:二级索引未覆盖查询列时,需根据主键回聚簇索引查数据。

避免方法:

使用覆盖索引(索引包含所有查询字段)。

创建联合索引,减少回表次数。

九、 事务特性与隔离级别

ACID特性:

原子性: 事务不可分割,全部成功或全部失败。

一致性: 事务执行前后数据库的一致性。

隔离性: 多个事务并发执行对彼此的独立影响。

持久性: 一旦事务完成,其结果会永久保存。

隔离级别:

级别脏读不可重复读幻读
READ UNCOMMITTED×××
READ COMMITTED××
REPEATABLE READ×
SERIALIZABLE

十、 SQL优化的方式和索引优化的方式

SQL 优化:

避免 SELECT *,仅选择必要列。

使用LIMIT限制结果集大小。

尽量减少子查询,使用 JOIN 替代。

索引优化:

确保索引覆盖查询。

正确选择索引列(高选择性)。

定期更新统计信息。

十一、MySQL的锁

表锁: 对整个表进行锁定。

行锁: 只锁定当前行, InnoDB 使用的类型。

意向锁: 支持建立非阻塞的事务处理。

共享锁: 允许并发读取。  

排他锁: 阻止其他事务读取和写入。

乐观锁:假设出现冲突的可能性较低 在操作完成之前不会对数据加锁

悲观锁:假设出现冲突的可能性很高 在操作之前就对数据加锁

注:

update使用行级锁 因为mysql通过行结构存储数据

十二、判断SQL优化

执行时间过长。慢查询日志   explain分析

查询的行数远大于实际使用的行数。

使用了复杂的 JOIN 或子查询。

锁争用,导致性能下降。

频繁的全表扫描。

十三、MySql的分库分表

性能优化:

  • 数据量过大:随着数据量的增加,单个数据库表的查询和写入性能可能会下降。分表可以将数据水平切分,每个表只包含一部分数据,从而提高查询效率。

  • 索引效率:较小的表可以提高索引的效率,从而加快查询速度。随着表越来越大,索引变得庞大,查找性能会受到影响。

并发处理:

 提升并发能力:分库分表可以将请求分散到多个数据库或表上,从而让多个请求并行处理,提升系统的整体并发性能。

可扩展性:

横向扩展:当数据量增加时,通过分库分表可以简化扩展。新的写入请求可以通过负载均衡分配到不同的数据库实例上,提高系统的扩展性。

时机:

  • 单表数据量:超过500万行(根据硬件调整)

  • 并发瓶颈:QPS超过2000且无法通过扩容提升

  • 存储限制:单表数据量接近服务器存储上限

相关文章:

  • 网站开发技术教程北京百度竞价托管
  • 网站建设功能评估表论坛排名
  • 做面包网站品牌推广活动策划案例
  • 邹城建设银行网站2021年年度关键词排名
  • 网站建设制作 南京公司关键词搜索量查询
  • 最少收藏十个域名网站百度关键词优化培训
  • unity pico开发 三 移动 旋转 传送
  • Python深度学习环境配置(Pytorch、CUDA、cuDNN),包括Anaconda搭配Pycharm的环境搭建以及基础使用教程(保姆级教程,适合小白、深度学习零基础入门)
  • 经验总结:使用vue3测试后端接口的模板
  • 【京准时钟】网络时间同步服务器对数据库的重要性
  • 【JAVA】阿里云百炼平台对接DeepSeek-V3大模型使用详解
  • DOM Node
  • 鸿蒙NEXT开发-Navigation组件导航
  • Python - Python操作Redis
  • JavaWeb后端基础(1)
  • 【Linux】Linux的基本指令(2)
  • 数据库数据恢复—SQL Server附加数据库报错“错误 823”怎么办?
  • PHP面试题--后端部分
  • 浅谈人工智能之Windows安装llama factory
  • vue使用a-table设置自定义合并字段实现某字段值相同则合并行
  • pyQT5简易教程(一):制作一个可以选择本地图片并显示的桌面应用
  • 455. 分发饼干(LeetCode)
  • Oracle 数据变化量查询
  • mac下载MAMP6.8.1;解决mac使用小皮面板安装php7.4
  • 动态表头导出EasyExcel
  • 基于C语言对CAPL语法基础的理解