Mysql进阶总结

MyISAM vs InnoDB

MyISAMInnoDB
存在时间< 5.5>=5.5
对锁的支持表级别(table-level locking)行级别(row-level locking)&表级别(table-level locking)
事务不支持支持
安全恢复不可以可以
外键不支持支持
MVCC多版本并发控制不支持支持
索引非聚簇索引聚簇索引

事务

在这里插入图片描述

并发事务带来的问题

  • 脏读(Dirty read)
  • 丢失修改(Lost to modify)
  • 不可重复读(Unrepeatableread)
  • 幻读(Phantom read)

不可重复读 vs 幻读

不可重复读的重点是修改比如多次读取一条记录发现其中某些列的值被修改,幻读的重点在于新增或者删除比如多次读取一条记录发现记录增多或减少了。

事务隔离级别

隔离级别脏读不可重复读幻影读
READ-UNCOMMITTED
READ-COMMITTED×
REPEATABLE-READ××
SERIALIZABLE×××

MySQL InnoDB 存储引擎的默认支持的隔离级别是 REPEATABLE-READ

大表优化

  • 限定数据的范围, 避使用 select * from xxxx
  • 读/写分离,主从库
  • 垂直分区
    • 垂直拆分的优点: 可以使得列数据变小,在查询时减少读取的Block数,减少I/O次数。此外,垂直分区可以简化表的结构,易于维护。
    • 垂直拆分的缺点: 主键会出现冗余,需要管理冗余列,并会引起Join操作,可以通过在应用层进行Join来解决。此外,垂直分区会让事务变得更加复杂;
  • 水平分区:通过某种策略存储数据分片

参考大表优化方案

Id 生成方案

  • UUID
  • 数据库自增 id
  • 利用 redis 生成 id
  • Twitter的snowflake算法
  • 美团的Leaf分布式ID生成系统

一条SQL语句执行得很慢的原因有哪些?

一个 SQL 执行的很慢,我们要分两种情况讨论:

1、大多数情况下很正常,偶尔很慢,则有如下原因

(1)、数据库在刷新脏页,例如 redo log 写满了需要同步到磁盘。

(2)、执行的时候,遇到锁,如表锁、行锁。

2、这条 SQL 语句一直执行的很慢,则有如下原因。

(1)、没有用上索引:例如该字段没有索引;由于对字段进行运算、函数操作导致无法用索引。

(2)、数据库选错了索引。

参考sql执行慢的原因

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值