MySQL优化

本文介绍了MySQL中InnoDB和MyISAM两种存储引擎的特点,对比了它们在事务支持、索引类型及性能上的差异,并深入探讨了B-Tree和哈希索引的工作原理及应用场景。此外,还提供了一系列针对索引使用的最佳实践建议,如如何创建高效索引、如何利用索引进行查询优化等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引擎

  1. InnoDB:采用两阶段锁定协议,支持事务,实现了四个标准的隔离级别(默认可重复读,通过间隙锁策略防止幻读的出现),索引基于聚簇索引建立。
  2. MyISAM:默认存储引擎,不支持事务和行级锁,崩溃后无法安全恢复。

索引

索引类型

  1. B-Tree索引
    • 全值匹配
    • 匹配最左前缀
    • 匹配列前缀
    • 匹配范围值
    • 精确匹配某一列并范围匹配另外一列
    • 只访问索引的查询
  2. 哈希索引
    • 精确匹配索引所有列

索引的优点

  • 减少服务器需要扫描的数据量
  • 帮助服务器避免排序和临时表
  • 将随机I/O变为顺序I/O

高性能的索引策略

  1. 独立的列
    • 查询中列必需是独立的,不能是表达式的一部分,也不能使函数的参数
  2. 前缀索引和索引选择性
    • 选择足够长的前缀以保证较高的选择性,又不能太长
  3. 多列索引
  4. 选择合适的索引列顺序
  5. 聚簇索引

查询性能优化

优化数据访问

  • 查询不需要的记录(limit)
  • 多表关联时返回全部列
  • 总是取出全部列
  • 重复查询相同的数据
  • explain type(全表扫描、索引扫描、范围扫描、唯一范围扫描、常数引用)
  • explain extra(using index、using where)

重构查询的方式

  • 一个复杂查询拆分为多个简单查询
  • 切分查询
  • 分解关联查询

查询执行的基础

这里写图片描述
1. 查询优化器
- 重新定义关联表的顺序
- 将外连接转化成内连接
- 使用等价交换原则
- 优化COUNT()、MIN()、MAX()
- 预估并转化为常数表达式
- 覆盖索引扫描
- 子查询优化
- 提前终止查询
- 等值查询
- 列表IN()的比较

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值