博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL学习笔记 初学基础篇
阅读量:7064 次
发布时间:2019-06-28

本文共 1535 字,大约阅读时间需要 5 分钟。

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

主要的学习资料:

  • MySQL实战45讲(GeekTime)
  • 高性能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

你可能感兴趣的文章
MySQL下全文索引
查看>>
SQL Server 作业同步
查看>>
10 个最酷的 Linux 单行命令 — LinuxTOY
查看>>
left join
查看>>
一起谈.NET技术,Microsoft Ribbon for WPF 正式发布
查看>>
android如何拍照以及返回拍的图片(经过验证的实际例子)
查看>>
【编译】UI设计师必读的13篇文章
查看>>
隐私保护利器-----开辟密盘
查看>>
Silverlight调用JS获得浏览器窗口大小
查看>>
android中文乱码解决大全
查看>>
Getting Started with iOS Development Part10:Customizing your Mobile target's Splash screen
查看>>
8个很棒的 jQuery 倒计时插件和教程
查看>>
python implemention javascript encodeURIComponent
查看>>
SQL查询语句精华
查看>>
Socket服务器整体架构概述
查看>>
Sketchup二次开发API之UI类
查看>>
串连接
查看>>
jsp连接数据库的乱码问题 servlet请求参数编码处理get post
查看>>
Java小项目--坦克大战(version1.0)
查看>>
Java多线程同步问题的探究
查看>>