mysql 存在的意义和运行原理
- mysql和hibernate的区别
- mysql的存在的意义在于将sql和java进行解耦,因为在现今的发展情况下,hibernate的全自动sql无法适应或者说对于sql的不可控是不能接受的
- mysql将sql语句书写移交给开发者
- mysql的工作原理 三层
- 启动时扫描mapper接口,通过动态代理生成代理对象, 根据方法签名找到对应的Statement
- sqlSeesion根据对应的sqlid找到语句.并进行分析语法错误, sqlSeesion : mapper ->sql -->参数绑定PreparedStatement, 获取结果集,这里的执行器有 三种,simple , reuse, batch
- 框架的核心设计思想
- 主要是把sql的控制权交给开发者,实现sql可控
mysql 中的日志问题:
redo log : 重做日志
undo log :回滚日志
binlog : 二进制日志 存储引擎部分
mysql的缓存,mysql 有二级缓存
一级缓存: SqlSession 级别,默认开启,基于 HashMap 实现,key 为 SQL + 参数
二级缓存 : Mapper 级别,跨 SqlSession 共享,默认关闭
explain sql 执行计划
type: 不能是all,最好是打到re_ref 优先级:ALL < index < range < ref < eq_ref < const/system < NULL;
key字段: 必须命中预期索引,无NULL(除非表数据量 < 100 行,全表扫描更快)
Extra字段:出现Using index(覆盖索引,无回表),彻底减少磁盘 IO; 无Using filesort、Using temporary(这两个是性能杀手,尤其数据量 > 1 万时)
ref : 至少要到range,最好到ref/eq_ref,杜绝ALL(全表扫描)key实际使用的索引必须是你预期的索引(比如查phone要用到idx_user_phone);
select_type:杜绝SUBQUERY(子查询)、DERIVED(派生表),尽量用SIMPLE(简单查询)
查询时遵循 等值优先, 模糊匹配,访问排序,关联回表
age -- 第一:等值筛选(=)
phone, -- 第二:范围筛选(LIKE '138%',前缀匹配仍能利用索引)
create_time, -- 第三:范围筛选(>)
id, -- 第四:JOIN关联字段
username -- 第五:SELECT返回字段
浙公网安备 33010602011771号