当前位置: 首页 > news >正文

MySQL学习笔记 初学基础篇

之前在上一家公司的时候,没有使用过MySQL,都是使用的SQL Server,虽然一样有做过数据库存储过程的优化,但是对于底层实现,内部原理是没有了解的,所以决定系统性的学习下MySQL,并且记录下学习过程中遇到的问题和一些心得体会,希望大家能够一起探讨,帮忙斧正。

主要的学习资料:

  • MySQL实战45讲(GeekTime)
  • 高性能MySQL(第三版)
  • MySQL官方文档
  • 具体其他的资料大家也可以参考掘金小册中的MySQL运行最后一篇文章中找到更为详细的资料

MySQL Server端执行语句经历的几个过程(Base on InnoDB

1.连接器
连接器负责通过端口ip 端口号port 用户名user和密码pwd来连接到对应的server上
命令行中命令如下
mysql -h[ip] -**P**[port] -u[user] -p([pwd])
本地访问ip&port均可省略 最好使用将密码单独key入的形式防止泄露

连接也分为长连接和短连接,推荐使用长连接
复制代码

2.查询缓存
常用于表数据不怎么发生变化的配置表中,表上有更新时,就会全部清空该表上的缓存 在mysql 8.0之后的版本中已经删除
在之前的版本可以使用, 设置query_cache_type -> DEMAND

mysql> select SQL_CACHE * FROM T WHERE ...
复制代码

3.分析器
根据输入进行词法分析 完成语法规则的修正 当发现错误时,一般会在第一处错误的地点抛出

You hava an error in your SQL syntax..
复制代码

4.优化器
决定使用哪条索引,以及 表联join的顺序 5.执行器 判断是否有执行权限 然后向存储引擎发起请求,最终返回结果给到客户端
当执行的是更新(插入/删除)语句的时候
将更新操作分别写入redolog和binlog用于备份
redolog 是由存储引擎层产生 环形数据结构,大小固定
binlog 由Server层产生,数据大小可追加写入
引擎层写入redolog后,redolog处于prepare状态,Server层生成该操作的binlog写入磁盘后,将这条redolog更新为commit状态,更新才完成,以这样的两阶段提交来保证两份日志之间的逻辑数据一致

事务 Transation

ACID(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔离性、持久性)
原子性保证该事务要么全部完成,要么全部不完成
一致性保证在事务开始之前到结束之后,数据库的完整性约束没有被破坏
隔离性保证每个事务对其他事务的操作是可以分离的,不依赖于其他事务
持久性保证一旦提交,其结果是永久性的 同时存在不同的隔离级别 包括1.读未提交,2.读提交,3.可重复读,4.串行化

索引 Index

索引是为了提供查询数据的效率

MySQL默认采用的是B+树(多叉树) 每个索引即对应的一颗B+树,主键索引的叶子节点存储的是整行数据,而非主键索引的叶子节点内容则是主键值。所以经常使用主键索引来减少查询树的次数。 因为B+树的有序性导致,每次在插入新row是需要对索引进行必要的维护,所以更为推荐有序的自增索引作为主键,而少使用业务主键。

覆盖索引

最左前缀原则--可以是联合索引的最左N个字段,也可以是字符串索引的最左M个字符 如果可以通过调整顺序而少建立一个索引,那这个顺序往往需要优先考虑。同时当联合索引又都有单独各自查询时,则考虑上空间的因素更为通常。

转载于:https://juejin.im/post/5cf5d75ff265da1b9612f009

相关文章:

  • Linux磁盘及文件系统的管理
  • PC端和移动端测试区别
  • Zabbix 3.0 主备模式 [八]
  • 如何接入新连接
  • centos7 firewall操作
  • vscode 终端下载vue
  • ./和../以及/和~之间的区别
  • 2016.8.17服务器端数据库用户导入导出方法 expdp和impdp
  • 十年码农建议:写代码时应该反复问自己8个问题
  • quartz学习
  • 6.10 docker(四)进入容器
  • 【Todo】Nodejs学习计划
  • 2019西安联训B层 Day 5 test T2 排列组合
  • pg_bulkload
  • 洛谷 P1233 【木棍加工】题解
  • 【node学习】协程
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • Apache的80端口被占用以及访问时报错403
  • Asm.js的简单介绍
  • gulp 教程
  • JS 面试题总结
  • LeetCode29.两数相除 JavaScript
  • Python连接Oracle
  • 翻译:Hystrix - How To Use
  • 学习Vue.js的五个小例子
  • 一文看透浏览器架构
  • ​2020 年大前端技术趋势解读
  • # 数据结构
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #android不同版本废弃api,新api。
  • #数学建模# 线性规划问题的Matlab求解
  • %check_box% in rails :coditions={:has_many , :through}
  • (03)光刻——半导体电路的绘制
  • (11)MSP430F5529 定时器B
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (备忘)Java Map 遍历
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (七)理解angular中的module和injector,即依赖注入
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (转)树状数组
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • (转载)虚函数剖析
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .Net CF下精确的计时器
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .Net多线程总结
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • @requestBody写与不写的情况
  • @德人合科技——天锐绿盾 | 图纸加密软件有哪些功能呢?
  • [ MSF使用实例 ] 利用永恒之蓝(MS17-010)漏洞导致windows靶机蓝屏并获取靶机权限
  • [ NOI 2001 ] 食物链
  • [ACTF2020 新生赛]Include
  • [asp.net core]project.json(2)