• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

三木筒子

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

mysql 存在的意义和运行原理

  1.  mysql和hibernate的区别
    1. mysql的存在的意义在于将sql和java进行解耦,因为在现今的发展情况下,hibernate的全自动sql无法适应或者说对于sql的不可控是不能接受的
    2. mysql将sql语句书写移交给开发者
  2.  mysql的工作原理 三层
    1. 启动时扫描mapper接口,通过动态代理生成代理对象, 根据方法签名找到对应的Statement
    2. sqlSeesion根据对应的sqlid找到语句.并进行分析语法错误, sqlSeesion : mapper ->sql -->参数绑定PreparedStatement, 获取结果集,这里的执行器有 三种,simple , reuse, batch
  3. 框架的核心设计思想
    1. 主要是把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返回字段

 

 

 

 

  

如有错误,请邮件zs253499660@sina.com,如有更好的方法,可以推荐

posted on 2026-02-09 13:44  森酱  阅读(2)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3