目录

ThasBlog

学无止境

标签: MySQL (4)

SQL 优化的几种方式 有更新!

高性能索引 建立三星索引: 一星:根据索引能够确定一段较小的范围,散列好的字段靠前 二星:查询结果排序与索引排序一致,联合索引从做到右有序。 三星:宽索引,查询结果尽可能在索引中找到(覆盖索引),避免回表 索引使用注意点: 不要在索引列上做运算 尽可能全值匹配 (唯一确定一条索引) 最左匹配原则 范围条件放最后 覆盖索引 不等于要慎用 Null 和 Not Null, 尽可能不要使用null, null有很歧义 like查询只能匹配做前缀 字符串要加引号 or的所有条件都必须要有索引,否则会全表扫描 使用索引排序来做排序,从左到右依次有序,中间索引单独排列是无序的 使用自增主键,顺序插入(MySQL B+树特性) 移除无用的索引 插入或修改数据都需要修改索引,无用索引会浪费插入时的性能。 分页优化 分页查询时,offset的那部分依然会被查询到,只是在返回客户端时被丢弃了 (也就是查询到了大量不必要的数据),先根据条件查询 ID(不回表),再根据ID查询其他字段(子查询)。 此种办法会多物化出一个子查询结果集。 通过手动指定 MaxId 限定查询的起始位置。 查询降级 当查询无可避....

MySQL 范式

常见的三范式: 数据表的所有字段必须是原子的, 不可拆分的 数据表的每条记录必须是唯一的, 要有一个主键标识, 不能由多个字段共同确定一条记录的唯一性 数据表关联其他数据表时, 不能存在其他数据表主键字段以外的其他字段 反范式: 反第一范式: 针对已有记录做创建缓存表和汇总表 反第二范式: 计数器表, 并发对同一条数据进行修改, 冲突大, 效率低, 拆成多条记录减少并发修改(类似ConcurrentHashMap记录) 反第三范式: 冗余字段, 减少连接查询. 分库分表中用得比较多, 连接查询开销大

MySQL 事务

事务特性: 原子性 一致性 隔离性 持久性 事务并发问题: 脏读 读到了未提交的事务 脏写 未提交的事务覆盖了已提交的事务 幻读 读到了别人新插入的数据 不可重复读 多次读取数据不一样, 被已提交的事务修改了值 写入偏差 已提交的事务覆盖了已提交的事务, 造成了不一致的问题, 通常是业务上进行保证 事务隔离级别: 读未提交 基本不用, 脏读,脏写,幻读,不可重复读均存在 读已提交 用的比较多, 不能避免幻读, 不可重复读 可重复读 存在幻读问题, MySQL使用间隙锁解决了幻读问题 串行化 基本不用, 无高性能

MySQL 体系架构 有更新!

MySQL架构分为3部分, 连接层, Server层, 引擎层. 连接层负责服务端与客户端的连接, 会话和权限验证. Server层包括SQL接口, 解析器, 优化器和查询器. 引擎层则是数据存储的具体的实现.