Mysql数据库学习笔记

基础

查询

  • 等值查询、范围查询、或和查询
  • 分页查询
  • 聚合查询
  • 表连接查询(全连接,左连接,右连接)
    我们把tableA看作左表,把tableB看成右表,那么INNER JOIN是选出两张表都存在的记录:
inner-join

LEFT OUTER JOIN是选出左表存在的记录:

left-outer-join

RIGHT OUTER JOIN是选出右表存在的记录:

right-outer-join

FULL OUTER JOIN则是选出左右表都存在的记录:

full-outer-join

事务隔离

mysql的事务隔离默认是Repeatable Read隔离
Repeatable Read隔离保证了一个事务内多次查询结果一致。
为了保持查询结果一致,会引出新增数据冲突。
参考:https://www.liaoxuefeng.com/wiki/001508284671805d39d23243d884b8b99f440bfae87b0f4000/001540475174923bc4157157ae547769d6933b9d66bc815000

锁分析

分析MySQL/InnoDB的加锁规则,需要以下前置条件:

  • 数据的存储格式 (堆组织表 vs 聚簇索引表);并发控制协议 (MVCC vs Lock-Based CC);Two-Phase Locking;数据库的隔离级别定义 (Isolation Level)
  • SQL本身的执行计划 (主键扫描 vs 唯一键扫描 vs 范围扫描 vs 全表扫描)
  • 数据库本身的一些实现细节 (过滤条件提取;Index Condition Pushdown;Semi-Consistent Read)
  • 死锁产生的原因及分析的方法 (加锁顺序不一致;分析每个SQL的加锁顺序)

查询优化

  1. 数据表的结构设计和数据表的查询方式(等值查询、范围查询等等),数据表的预期数量值
  2. 数据库架构优化

hash索引场景

适用于等值查询。
比如=、in()、<=>。不支持任何范围查询。

分布式表

唯一ID自增要求

要求:

  • 实现了全局唯一ID
  • 不影响业务数据库的扩展
  • 获取ID有容灾,单个表无法访问不影响全局

方案:

  • mycat分布式mysql中间件

方案原理:

你可能感兴趣的:(Mysql数据库学习笔记)