You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2.6 KiB

Mysql查询优化

  • 慢查询:减少不需要的数据、不取出全部列、减少相同数据的查询 原因:数据量大 select * (禁止)
  • 使用覆盖索引
  • 改变数据库表结构(汇总表)
  • 重写复杂查询SQL

mysql记录全部超过 long query time的sql语句的日志

Mysql中的索引聚族索引、辅助索引定义索引生产B+树

  • InnoDB引擎B+树,哈希索引,全文索引
  • 聚集索引、聚族索引将表的主键构造B+树,存放在叶子节点
  • 如果没有主键mysql创建rowid看不见
  • 索引需要定义辅助索引、id索引、主键索引等等
  • 辅助索引会存放主键、但是不包含全部数据
  • 主键索引会包含全部数据
  • 联合索引多个列组合起来索引减少B+数的数量
  • img_5.png

优化:减少索引数量、联合索引

-回表:通过辅助索引找到主键、再通过主键再找到其他数据(尽量减少)

  • 查询优化器:对比:二级索引+回表,全表扫描主键

索引Index 帮助Mysql高效获取数据的数据结构

  • 哈希索引用HashMap实现索引。缺点范围查找、排序、组合索引、hash冲突
  • B+树=二叉查找(左右子树的值小于根)-平衡高度差不超过1-B树多叉平衡查找树
  • B+:所有数据放在叶子结点,(非叶子结点保存索引,不保存数据)(链表指向相邻结点)Mysql
  • img_2.png
  • img_3.png
  • B树非叶子结点也存放数据、不用链表相连叶子结点查询效率低、范围小
  • B* 非叶子结点也存放指针Oracle用
  • img_4.png

平衡二叉树调整

  • 平衡因子:左右高度差,通过旋转:改变高度差(左旋、右旋)
  • img.png
  • img_1.png

慢查询优化

  • 重写复杂的sql查询
  • 把指向sql按时间排序

事务和事务隔离级别

  • 事务:整体的执行单位、事务的特性
  • 事务并发引起的问题:脏读问题(回滚)、不可重复读(修改)、幻读(增加)
  • READ UNCOMMITTED :未提交读 READ COMMITTED提交读 REPETABLE READ :可重复读
  • SERIALIZABLE :可串行化
  • 修改SET [GLOBAL|SESSION] TRANSACTION ISOLATION LEVEL level;

事务的操作

  • 开启,提交,回滚
  • 保存点高级回滚SAVEPOINT 保存点名称;ROLLBACK TO [SAVEPOINT] 保存点名称;
  • 隐式提交:(不同的SQL语言类型)可以不用commit提交
  • 开启下一个事务,上一个事务提交

mysql中的锁

  • 锁定读for updateX锁、独占锁 in share mode
  • 锁释放时间