这一次,让我们一起来搞懂MySQL
欢迎加入我的专栏,和我一起开始 MySQL 学习之旅。
从日常的开发和优化中,一步步地从一个数据库小白成为 MySQL 调优的开发人员。回想起来,从我第一次带创建索引至今,已经有十个年头了。在这个过程中,走了不少弯路,但同时也收获了很多的知识和思考,希望能在这个专栏里分享给你。
记得刚开始接触 MySQL,是我在做权限系统的时候。我们遇到了一个奇怪的问题,一个正常 10 毫秒就能完成的 SQL 查询请求偶尔要执行 100 多毫秒才结束。当时主管问我是什么原因,我其实也搞不清楚,就上网查答案,但怎么找都找不到,又脸皮薄不想说自己不知道,只好硬着头皮翻源码。后来遇到了越来越多的问题,也是类似的情景,所以我逐步养成了通过分析源码理解原理的习惯。 当时,我自己的感觉是,即使我只是一个开发工程师,只是 MySQL 的用户,在了解了一个个系统模块的原理后,再来使用它,感觉是完全不一样的。当在代码里写下一行数据库命令的时候,我就能想到它在数据库端将怎么执行,它的性能是怎么样的,怎样写能让我的应用程序访问数据库的性能最高。哪些数据处理让数据库系统来做性能会更好,哪些数据处理在缓存里做性能会更好,我心里也会更清楚。在建表和建索引的时候,我也会更有意识地为将来的查询优化做综合考虑,比如确定是否使用递增主键、主键的列怎样选择等等。 但随后我又有了一个新的困惑,我觉得自己了解的 MySQL 知识点是零散的,没有形成网络。于是解决完一个问题后,很容易忘记。再碰到类似的问题,我又得再翻一次代码。
所以如果一开始就有一些从理论到实战的系统性指导,那该多好啊,也许我可以学习得更快些。 在策划这个专栏的时候,我还是持怀疑态度的。为什么呢?现在不比当年了,犹记得几年前,使用 MySQL 的过程中碰到问题的话,基本上都只能到代码里去找答案,因为那时网上的资料太少了。 而近十年来,MySQL 在中国广泛普及,技术分享文章可以说是浩如烟海。所以,现在要系统地介绍一遍 MySQL 的话,恐怕里面提及的大多数知识点,都可以在社区文章中找到。那么我们做这个专栏的意义在哪里? 数据库是一个综合系统,其背后是发展了几十年的数据库理论。同时,数据库系统也是一个应用系统,可能一个业务开发人员用了两三年 MySQL,还未必清楚那些自己一直在用的“最佳实践”为什么是最佳的。
于是,我希望这个专栏能够帮助这样的一些开发者:他们正在使用 MySQL,知道如何写出逻辑正确的 SQL 语句来实现业务目标,却不确定这个语句是不是最优的;他们听说了一些使用数据库的最佳实践,但是更想了解为什么这么做;他们使用的数据库偶尔会出问题,需了解如何更快速、更准确地定位问题,甚至自己解决问题…… 在过去的几年里,我带过几个应届毕业生,看着他们成长,要求他们原理先行,再实践验证。几年下来,他们的成长速度都很快,其中好几个毕业没两年就成为团队的骨干力量了。我也在社招的时候面试过很多有着不错的运维实践经验和能力的候选人,但都因为对数据库原理仅有一知半解的了解,而最终遗憾地没有通过面试。 因此,我希望这个专栏能够激发开发者对数据库原理的探索欲,从而更好地理解工作中遇到的问题,更能知道背后的为什么。所以我会选那些平时使用数据库时高频出现的知识,如事务、索引、锁等内容构成专栏的主线。这些主线上是一个个的知识点。每个点就是一个概念、一个机制或者一个原理说明。在每个说明之后,我会和你讨论一个实践相关的问题。 希望能以这样的方式,让你对 MySQL 的几条主线有一个整体的认识,并且了解基本概念。在之后的实践篇中,我会引用到这些主线的知识背景,并着力说明它们是怎样指导实践的。这样,你可以从点到线,再到面,形成自己的 MySQL 知识网络。
在这里,有一份目录,你也可以先了解下整个专栏的知识结构。
了解了原理,才能在实践中不断创新,提升个人的价值和工作输出。 从这里开始,跟我一起搞懂 MySQL!
这一次,让我们一起来搞懂MySQL的更多相关文章
- 彻底搞懂MySQL为什么要使用B+树索引
目录 MySQL的存储结构 表存储结构 B+树索引结构 B+树页节点结构 为什么要用B+树索引 二叉树 多叉树 B树 B+树 搞懂这个问题之前,我们首先来看一下,MySQL表的存储结构 MySQL的存 ...
- 搞懂MySQL InnoDB B+树索引
一.InnoDB索引 InnoDB支持以下几种索引: B+树索引 全文索引 哈希索引 本文将着重介绍B+树索引.其他两个全文索引和哈希索引只是做简单介绍一笔带过. 哈希索引是自适应的,也就是说这个不能 ...
- 搞懂MySQL GTID原理
从MySQL 5.6.5 开始新增了一种基于 GTID 的复制方式.通过 GTID 保证了每个在主库上提交的事务在集群中有一个唯一的ID.这种方式强化了数据库的主备一致性,故障恢复以及容错能力. GT ...
- 一文搞懂mysql索引底层逻辑,干货满满!
一.什么是索引 在mysql中,索引是一种特殊的数据库结构,由数据表中的一列或多列组合而成,可以用来快速查询数据表中有某一特定值的记录.通过索引,查询数据时不用读完记录的所有信息,而只是查询索引列即可 ...
- 搞懂MySQL InnoDB事务ACID实现原理
前言 说到数据库事务,想到的就是要么都做修改,要么都不做.或者是ACID的概念.其实事务的本质就是锁和并发和重做日志的结合体.那么,这一篇主要讲一下InnoDB中的事务到底是如何实现ACID的. 原子 ...
- 搞懂MySQL分区
一.InnoDB逻辑存储结构 首先要先介绍一下InnoDB逻辑存储结构和区的概念,它的所有数据都被逻辑地存放在表空间,表空间又由段,区,页组成. 段 段就是上图的segment区域,常见的段有数据段. ...
- 一文快速搞懂MySQL InnoDB事务ACID实现原理(转)
这一篇主要讲一下 InnoDB 中的事务到底是如何实现 ACID 的: 原子性(atomicity) 一致性(consistency) 隔离性(isolation) 持久性(durability) 隔 ...
- 一本彻底搞懂MySQL索引优化EXPLAIN百科全书
1.MySQL逻辑架构 日常在CURD的过程中,都避免不了跟数据库打交道,大多数业务都离不开数据库表的设计和SQL的编写,那如何让你编写的SQL语句性能更优呢? 先来整体看下MySQL逻辑架构图: M ...
- 程序员必须了解的知识点——你搞懂mysql索引机制了吗?
一.索引是什么 MySQL官方对索引的定义为:索引(Index)是帮助MySQL 高效 获取数据的数据结构,而MYSQL使用的数据结构是:B+树 在这里推荐大家看一本书,<深入理解计算机系统的书 ...
- 一文搞懂MySQL前缀索引
引入 通常在开发中我们需要定义字符串类型的字段,例如用户名或者用户邮箱等. 假设我们在维护一个用户登录系统,用户表的定义: create table User( ID bigint unsigned ...
随机推荐
- pycharm中自定义函数补全
在 PyCharm 中,你可以通过以下步骤实现这一目标: 打开 PyCharm,点击顶部菜单的 "File"(文件) -> "Settings"(设置). ...
- 【系统选型】企业即时通讯(IM)软件调研及供应商对比评估
企业即时通讯(IM)软件调研及供应商对比评估 1.概览 1.1 即时通讯 即时通讯(Instant messaging,简称IM)是一个终端服务,允许两人或多人使用网路即时的传递文字讯息.档案.语音与 ...
- 第129篇:JS模块化开发
好家伙,本篇为<JS高级程序设计>第二十六章"模块"学习笔记 JS开发会遇到代码量大和广泛使用第三方库的问题. 解决这个问题的方案通 常需要把代码拆分成很多部分,然后再 ...
- 【Azure 云服务】Azure Cloud Service中的错误事件 Error Event(Defrag/Perflib) 解答
问题描述 在Azure Cloud Service的实例中,收集到各种 Error Event 内容,本文针对所收集的三种Event进行解析. 1: This operation is not sup ...
- Apache Hudi 在 vivo 湖仓一体的落地实践
作者:vivo 互联网大数据团队 - Xu Yu 在增效降本的大背景下,vivo大数据基础团队引入Hudi组件为公司业务部门湖仓加速的场景进行赋能.主要应用在流批同源.实时链路优化及宽表拼接等业务场景 ...
- C++ 多线程笔记1 线程的创建
C++ 多线程笔记1 线程的创建 里面代码会用到的头文件 #include <iostream> #include <string> #include <memory&g ...
- 专访实在智能孙林君:颠覆传统RPA的实在IPA模式如何做到真正人人可用?
王吉伟对话实在智能孙林君:颠覆传统引领RPA行业的实在IPA模式是如何炼成的? 王吉伟对话实在智能孙林君:为什么第一款颠覆行业的RPA诞生在实在智能? 专访实在智能孙林君:打造出真正人人可用的实在 ...
- 没有 Release 文件的解决方法
https://blog.csdn.net/weixin_44903509/article/details/108825738 sudo apt-get update 出现问题 E: 仓库 " ...
- linux-给终端建立快捷键
在设置里,找到快捷键窗口,自定义快捷键, 名字:终端 命令:gnome-terminal 快捷键:ctrl+alt+t
- 四种方式实现点击chrome链接在ie中显示页面
1.c++ socket通过浏览器在ie中打开指定url github源码:https://github.com/iamzken/cpp-open-ie 2.vb生成exe,url访问exe启动ie并 ...