基础
查询
- 等值查询、范围查询、或和查询
- 分页查询
- 聚合查询
- 表连接查询(全连接,左连接,右连接)
我们把tableA看作左表,把tableB看成右表,那么INNER JOIN是选出两张表都存在的记录:
LEFT OUTER JOIN是选出左表存在的记录:
RIGHT 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的加锁顺序)
查询优化
- 数据表的结构设计和数据表的查询方式(等值查询、范围查询等等),数据表的预期数量值
- 数据库架构优化
hash索引场景
适用于等值查询。
比如=、in()、<=>
。不支持任何范围查询。
分布式表
唯一ID自增要求
要求:
- 实现了全局唯一ID
- 不影响业务数据库的扩展
- 获取ID有容灾,单个表无法访问不影响全局
方案:
- mycat分布式mysql中间件
方案原理: