大家都知道mysql现在很火,很多招后端工程师的要求其中一项就是
精通mysql
但是我们真的了解mysql吗?那么笔者要下面卖膏药了~

标题 网址
单机存储引擎到mysql的思考一 https://blog.csdn.net/xk4848123/article/details/105166855
单机存储引擎到mysql的思考二 https://blog.csdn.net/xk4848123/article/details/105195921
单机存储引擎到mysql的思考三 https://blog.csdn.net/xk4848123/article/details/105207797

笔者在大规模分布式存储系统笔记三中阐述了三种存储引擎大家还记得吗?哈希存储引擎、B树存储引擎 、LSM树存储引擎。在看到B树存储引擎时突然想到了mysql。

mysql简史

MySQL的历史可以追溯到1979年,一个名为Monty Widenius的程序员在为TcX的小公司打工,并且用BASIC设计了一个报表工具,使其可以在4MHz主频和16KB内存的计算机上运行。当时,这只是一个很底层的且仅面向报表的存储引擎,名叫Unireg。
Monty为满足客户的一个项目需求,毅然重新设计整个系统,1995年5月23日MySQL的第一个内部版本发行了,1996年对外公布了官方正式发行版(3.11.1)。
2005年10月,发布了里程碑的MySQL 5.0版本. 在5.0中加入了游标,存储过程,触发器,视图、查询优化以及分布式事务等,实现了"正常数据库管理系统"应当拥有的一整套功能。至此,MySQL明确地表现出向高性能数据库发展的步伐。
2009年04月Oracle以74亿美元收购Sun 公司,MySQL 转入Oracle 门下。
再后来出现了比较有里程碑意义的5.5,到现在已经mysql8了。

mysql是什么(结构)

我们以mysql默认引擎InnoDB来说,独立表空间的情况下每张表在磁盘上都对应一个.frm文件(表结构定义)和一个.ibd文件(数据文件),一张表数据文件本身就是按 B+Tree 组织的一个索引结构,这棵树的叶点data 域保存了完整的数据记录。这个索引的 key 是数据表的主键,因此 InnoDB 表数据文件本身就是主索引。mysql建议使用自增主键,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页。这样就会形成一个紧凑的索引结构,近似顺序填满。由于每次插入时也不需要移动已有数据,因此效率很高,也不会增加很多开销在维护索引上。那么单张表mysql到底存放多少数据呢,肯定不是无上限的,因为,MySQL 为了提高性能,会将表的索引装载到内存中。InnoDB buffer size 足够的情况下,其能完成全加载进内存,查询不会有问题。 但是,当单表数据库到达某个量级的上限时,导致内存无法存储其索引,使得之后的 SQL 查询会产生磁盘 IO,从而导致性能下降。阿里巴巴《Java 开发手册》提出单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表。那么为什么不用hash结构而采用B+树呢?大家都都知道hash的效率是O(1),而B+树是O(longdN),d是出度(分叉度),但是O(1)针对的是单条数据精确查询,我们系统常常是要查某个范围的数据,between,<>,>,<,order by 云云,这时候有序的B+树才能使查询更高效。B+树相对B-树的优点矮胖非叶子节点不存储data,这样一个节点就可以存储更多的key。)即减少IO次数,所有叶子结点组成一个单向链表,方便范围查询。平常我们开发过程中写sql一定要注意利用好索引,where 条件、order by条件以及group by根据实际出现频率考虑是否用索引,还有注意覆盖索引(就是你查的数据正好是索引)的使用,我们来看看为什么查的数据正好索引为什么就快。

看看上图中的InnoDB辅助索引(非聚簇索引也就是一般索引非主键),检索过程一目了然,如果查行数据还得再多IO几次,当然就慢了。
看看下面一个示例
超大分页查询优化,类似于select * from table where age &gt; 20 limit 1000000,10这种查询其实也是有可以优化的余地的.。这条语句需要load1000000数据然后基本上全部丢弃,只取10条当然比较慢。 当时我们可以修改为select * from table where id in (select id from table where age &gt; 20 limit 1000000,10)。这样虽然也load了一百万的数据,但是由于索引覆盖,要查询的所有字段都在索引中,所以速度会很快。
通常我们经常说尽量不要全表扫描,那什么是全表扫描呢,还记得之前我们是B+树的叶子节点是单向链表吗,全表扫描,其实就从这个链表中从前往后搜索出符合条件(比如非索引字段age)的记录。

mysql并发

通常我们一个项目会有一个连接池(dbcp,c3p0,druid,HikariCP)连接着mysql或者多个项目都在连接一个数据库,都在同时操作一个数据库或者一张表,那么为什么mysql的数据不会乱呢。ACID?那么背后到底是谁在操纵呢。在思考二中我讲继续阐述,谢谢。

单机存储引擎到mysql的思考一相关推荐

  1. 单机存储引擎到mysql的思考三

    上一篇我们阐述mysql锁机制以及MCVV多版本并发控制消除 读写阻塞本篇我们看看redo log.undo log以及bin log 标题 网址 单机存储引擎到mysql的思考一 https://b ...

  2. 单机存储引擎到mysql的思考二

    上一篇中我们主要介绍mysql存储引擎物理结构进而引发对索引的 思考 但是并发事务和锁机制又是怎样的,下面我们来探索一下 标题 网址 单机存储引擎到mysql的思考一 https://blog.csd ...

  3. 存储引擎:MySQL系列之七

    一.MyISAM存储引擎 缺点: 不支持事务 最小粒度锁:表级 读写相互阻塞,写入不能读,读时不能写 不支持MVCC(支持多版本并发控制机制) 不支持聚簇索引 不支持数据缓存 不支持外键 崩溃恢复性较 ...

  4. 存储引擎和Mysql服务层出现索引信息不一致错误提示

    2019独角兽企业重金招聘Python工程师标准>>> 错误日志: [ERROR] Table vip_cube/imp_sup_dm_sup_brand_name_goods_on ...

  5. CubeFS存储技术揭秘(2)— 纠删码单机存储引擎

    00 背景 CubeFS自3.0.0版本开始提供低成本的纠删码存储(BlobStore),BlobStore是一个高可靠.高可用.低成本.支持EB规模的Blob存储.通过前文(CubeFS存储技术揭密 ...

  6. mysql外键的存储引擎_10.mysql存储引擎

    2.1 存储引擎概述 和大多数的数据库不同, MySQL中有一个存储引擎的概念, 针对不同的存储需求可以选择最优的存储引擎. 存储引擎就是存储数据,建立索引,更新查询数据等等技术的实现方式 .存储引擎 ...

  7. mysql的存储引擎种类,mysql 存储引擎,基本数据类型

    存储引擎 日常生活中文件格式有很多种,并且针对不同的文件格式会有对应不同存储方式和处理机制(txt,pdf, word, mp4...) 针对不同的数据应该有对应的不同的处理机制来存储 存储引擎就是不 ...

  8. mysql数据库恢复数据_【技术分享】使用Innodb存储引擎的mysql数据库恢复

    作者:维一零 预估稿费:400RMB(不服你也来投稿啊!) 投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿 前言 某天,在测试一张新数据表的字段时,由于在phpmyadmin不断 ...

  9. MyISAM 存储引擎(mysql 8.0)

    MyISAM基于旧的(不再可用的)ISAM存储引擎,但有许多有用的扩展. 表 16.2 MyISAM 存储引擎特性 特征 支持 B树索引 是的 备份/时间点恢复(在服务器中实现,而不是在存储引擎中.) ...

最新文章

  1. SASS的一些使用体会(安装-配置-开启firefox的调试)
  2. OpenCV删除面积小的区域 实现图像二值化分割 标记连通区域
  3. leetcode —— 1038. 从二叉搜索树到更大和树
  4. 小狼程序员:工作遐想
  5. 华为P50为屠榜而来:搭载超高像素1/1.18英寸大底主摄
  6. 谷歌和 Zyxel 各修复一个已遭利用的 0day
  7. 软件测试52讲-安全第一:渗透测试
  8. Visual C++ 6.0 简体中文企业版
  9. 帆软关于排名公式、分组排名问题开窗函数
  10. 人狠话不多,细说大牛直播SDK之RTMP播放器和RTSP播放器...
  11. python report_python之Reportlab模块
  12. 0x00000040指定的网络名不再可用怎么办?
  13. Excel复制单元格样式
  14. http协议get请求方法和post请求方法的区别
  15. 用思维导图赏析老舍话剧著作《茶馆》
  16. 【虚幻引擎UE】场景中物体闪烁抖动摩尔纹问题集合
  17. c# 画刻度尺(支持缩放)
  18. Linux-QT5.9学习笔记——事件
  19. Android Qcom USB Driver学习(六)
  20. 关于Office弹窗+横幅提示“你的许可证不是正版,并且你可能是盗版软件的受害者...”的解决方案——以Office2019为例

热门文章

  1. android backtrace,Android程序backtrace分析方法
  2. Fink DataStream 常用API
  3. 深度学习attention原理_深度学习系列——attention机制与应用
  4. maven3.3.9安装和配置
  5. ntp服务器源码c语言,基于NTP服务器+ Ethernet智能手表(智能表源码+ Ethernet源码+3D打印)...
  6. 数据完整性采取哪些技术实现_接线端子插针插孔的焊接方法是通过哪些技术来实现的?...
  7. 深度学习计算机视觉理论基础(PyTorch)
  8. Figma如何导出jpg格式?
  9. Windows10中SwitchyOmega安装及部分异常处理
  10. 自动驾驶激光雷达、摄像头、毫米波雷达融合算法