前言

可能说起mysql,哪怕一个刚入门的小白都会跟我说,太低级了,这玩意有什么可整的,没啥意思,除了增删改查,索引,序列,还有什么呢?真当哥们是二B了呀

我就哈哈一笑,小伙子,还是太年轻啊,来看这张图(平台原因,像素不够,需要高清图,私信“架构图”获取)

怎么样,兄弟,密集恐惧症是不是犯了啊,还敢说mysql简单嘛?但是这样说的话是不是跟我的题目有点不一样啊,别着急,接着往下看

增删改查什么的都不说,咱就以mysql的优化为例,来证明一下,为什么我说真的不难

既然要说MySQL优化,那我们起码要先知道现在的MySQL已经为了让操作更容易,给我们提供了那些方便吧

MySQL24种系统特性

1.使用 C和C++编写,并使用了多种编译器进行测试,保证了源代码的可移植性。

2.支持AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统。

3.为多种编程语言提供了API。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby,.NET和 Tcl 等。

4.支持多线程,充分利用 CPU 资源。

5.优化的SQL查询算法,有效地提高查询速度。

6.既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中。

7.提供多语言支持,常见的编码如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名。

8.提供TCP/IP、ODBC 和JDBC等多种数据库连接途径。

9.提供用于管理、检查、优化数据库操作的管理工具。

10.支持大型的数据库。可以处理拥有上千万条记录的大型数据库。

11.支持多种存储引擎。

12.MySQL 是开源的,所以你不需要支付额外的费用。

13.MySQL 使用标准的SQL数据语言形式。

14.MySQL 对 PHP 有很好的支持,PHP是比较流行的 Web 开发语言。

15.MySQL是可以定制的,采用了GPL协议,你可以修改源码来开发自己的 MySQL 系统。

16.在线 DDL/更改功能,数据架构支持动态应用程序和开发人员灵活性(5.6新增)

17.复制全局事务标识,可支持自我修复式集群(5.6新增)

18.复制无崩溃从机,可提高可用性(5.6新增)

19.复制多线程从机,可提高性能(5.6新增)

20.3倍更快的性能(5.7[7]新增)

21.新的优化器(5.7新增)

22.原生JSON支持(5.7新增)

23.多源复制(5.7新增)

24.GIS的空间扩展[8](5.7新增)

好哒,那知道了这些之后,我们接下来看调优,这也是在面试的过程中被经常问到的一些问题,而且随着互联网的发展,数据量的增大,不想引入大数据体系的,那只能在数据库上下功夫了,那么对于数据库的调优,不知道各位觉得难吗?其实真的不难,不信,看下面

MySQL调优思维导图

看到这张思维导图,从上往下,不知道在看这篇文章的你有没有回想一下自己的知识体系中,这些方面是不是很清晰呢?

好,看完这句话,我的重点要来了,你在回想这些知识点的时候,是不是对你的知识点进行了一个回顾和梳理,查漏补缺,你也知道了自己知识点上的不足,是不是可以有针对性的进行学习呢?

我们以分库和分表为例去进行一个商讨
分库分表:

1、水平分库

概念:以字段为依据,按照一定策略(hash、range等),将一个库中的数据拆分到多个库中。

结果:

每个库的结构都一样;
每个库的数据都不一样,没有交集;
所有库的并集是全量数据;
场景:系统绝对并发量上来了,分表难以根本上解决问题,并且还没有明显的业务归属来垂直分库。

分析:库多了,io和cpu的压力自然可以成倍缓解。

2、水平分表

概念:以字段为依据,按照一定策略(hash、range等),将一个表中的数据拆分到多个表中。

结果:

每个表的结构都一样;
每个表的数据都不一样,没有交集;
所有表的并集是全量数据;
场景:系统绝对并发量并没有上来,只是单表的数据量太多,影响了SQL效率,加重了CPU负担,以至于成为瓶颈。推荐:一次SQL查询优化原理分析

分析:表的数据量少了,单次SQL执行效率高,自然减轻了CPU的负担。

3、垂直分库

概念:以表为依据,按照业务归属不同,将不同的表拆分到不同的库中。

结果:

每个库的结构都不一样;
每个库的数据也不一样,没有交集;
所有库的并集是全量数据;
场景:系统绝对并发量上来了,并且可以抽象出单独的业务模块。

分析:到这一步,基本上就可以服务化了。例如,随着业务的发展一些公用的配置表、字典表等越来越多,这时可以将这些表拆到单独的库中,甚至可以服务化。再有,随着业务的发展孵化出了一套业务模式,这时可以将相关的表拆到单独的库中,甚至可以服务化。

4、垂直分表

概念:以字段为依据,按照字段的活跃性,将表中字段拆到不同的表(主表和扩展表)中。

结果:

每个表的结构都不一样;
每个表的数据也不一样,一般来说,每个表的字段至少有一列交集,一般是主键,用于关联数据;
所有表的并集是全量数据;
场景:系统绝对并发量并没有上来,表的记录并不多,但是字段多,并且热点数据和非热点数据在一起,单行数据所需的存储空间较大。以至于数据库缓存的数据行减少,查询时会去读磁盘数据产生大量的随机读IO,产生IO瓶颈。

分析:可以用列表页和详情页来帮助理解。垂直分表的拆分原则是将热点数据(可能会冗余经常一起查询的数据)放在一起作为主表,非热点数据放在一起作为扩展表。这样更多的热点数据就能被缓存下来,进而减少了随机读IO。拆了之后,要想获得全部数据就需要关联两个表来取数据。

但记住,千万别用join,因为join不仅会增加CPU负担并且会将两个表耦合在一起(必须在一个数据库实例上)。关联数据,应该在业务Service层做文章,分别获取主表和扩展表数据然后用关联字段关联得到全部数据。

好了,到这里,分库和分表的操作基本就完成了,不知道大家有没有什么感觉,如果知识只是单纯的去看这些知识点,你能记住多久呢?反正如果我长时间不看,就忘了,,但是我不怂 啊,因为我有这张图,而且比展示出来的更加详细,所以当我需要用到时候就可以看了,直接就可以拿出来看,哪怕只有10分钟就够了。

不知道你怎么感觉,其实我觉得你也可以,当你学完之后,在我的这张知识图谱上,把会的知识点进行整理,不会的知识点在学完之后也可以整理到这份图谱中,即使后面用不到有所遗忘,但是当你需要这些资料的时候,比方说你要面试了,那你会觉得慌嘛?是不是拿出来这张图就可以啊,想看那个知识点点开看一下就可以了。

其实,今天的标题是有一点不是特别准确,其实每一个程序员们都清楚,不仅仅是数据库,其他 的技术也是这样,从Java基础(源码等)---架构师---大数据----人工智能,哪怕你不从事这一行,难道就不能去学习了吗?互联网发展这么快,天知道那天就能用到呢?

人无远虑必有近忧,好了,兄弟们,今天就到这里吧

关注我,后期不断更新新的文章,包括面试、技术、学习等技术,关注我,不迷路,有什么问题,也可以在评论区或者私信和我交流

觉得文章写的不错的老铁们,欢迎点赞+评论,
想获取资料的  关注私信我

果真这么难学?谁再说mysql难学,我一张思维导图就扔过去!相关推荐

  1. 谁再说mysql难学,我一张思维导图就扔过去,看完再说话

    前言 可能说起mysql,哪怕一个刚入门的小白都会跟我说,太低级了,这玩意有什么可整的,没啥意思,除了增删改查,索引,序列,还有什么呢?真当哥们是二B了呀 我就哈哈一笑,小伙子,还是太年轻啊,来看这张 ...

  2. 光说面试难,9张思维导图,总结Java面试核心知识点,你是否也复习到这样

    各位老铁,面试了吗?有没有找工作啊,小编没有找工作,但是公司通知,马上要开启一个新的项目----脑瓜子嗡嗡的,果然长时间的假期不是白放的,老boss憋着大招呢,正好趁着这段时间,反正早晚要用,就把自己 ...

  3. MySQL索引(漂亮简洁的思维导图)

    一个平平无奇又漂亮又简洁的 MySQL索引 思维导图罢了. 在整理 MySQL体系,结果发现太庞大了,于是拆开了. 本篇是 MySQL 的索引体系.重点是 聚集索引 .非聚集索引 .B+ 树 .索引的 ...

  4. 数学史思维导图_8张思维导图揭示:数学应该如何学,才能逆袭为学霸?

    如果说"如何学习数学?"是一个求解题的话,那么接下来就是该问题的求解过程: 第一步,每个学习者的自身情况不同,学习是受多因素影响的,理应找到到自己的长短板,更能"因材施教 ...

  5. 9张思维导图学懂Javascript

    话说,好记性不如烂笔头,而学习的道路就是一个不断的总结归纳的过程,今天给出的Javascript学习的思维导图内容,其实,我在2016年的时候,就已经跟大家分享过了,但是发现最近又有小伙伴来问要那个P ...

  6. 本专栏所有力扣题目的目录链接, 刷算法题目的顺序(由易到难/面试频率)/注意点/技巧, 以及思维导图源文件问题(持续更新中)

    这篇文章为本专栏所有力扣题目提供目录链接, 更加方便读者根据题型或面试频率进行阅读, 此外也会介绍我在刷题过程中总结的刷算法题目的顺序/注意点/技巧, 最后说下文中出现的思维导图源文件的问题 和 打卡 ...

  7. 当初我要是这么学操作系统就好了(附思维导图)

    公众号关注 "GitHubDaily" 设为 "星标",每天带你学编程! 作者 | cxuan 来源 | Java建设者 本文思维导图 操作系统 现代计算机系统 ...

  8. @override怎么加上去_不知道怎么学?java后端5年经验和技术总结(附思维导图)

    1.引言 今天的光棍节,经历了昨晚的疯狂之后,看着后台数据逐渐的趋于平稳,突然感觉身心疲惫,躺在椅子上,看着媳妇给我发的消息,同学群里在疯狂讨论昨晚的疯狂操作,身边的年轻人换了一批又一批,回想自己,毕 ...

  9. MySQL数据库体系 全面梳理(漂亮简洁的思维导图)

    MySQL数据库体系 基础 索引 锁 SQL优化 数据库优化 结语 一个平平无奇又漂亮又简洁的 MySQL数据库体系 全面梳理 思维导图罢了. 基础 基础图主要囊括了 数据库基础知识 .数据类型.存储 ...

最新文章

  1. 陶哲轩挑战失败的百年数学问题,被两名在家隔离的数学家破解了
  2. 漫画:如何在数组中找到和为 “特定值” 的两个数?
  3. 信息系统项目管理师:第4章:项目整体管理与变更管理(3)
  4. php 网页截屏,怎么用PHP实现网页截图
  5. java语言中的数据类型_Java语言中关于数据类型的一些总结
  6. 《计量经济学》学习笔记之多元线性回归模型
  7. 微信小程序之通过Canvas生成图片保存到手机相册
  8. Spring Cloud Eureka 入门 (二)服务提供者详解
  9. java中有ClockPane类吗_Java程序设计教程 冶金工业出版社第9章
  10. onvif开发之设备发现功能的实现
  11. 云图说|数据仓库服务 GaussDB(DWS) 的“千里眼、顺风耳”—数据库智能运维
  12. tshark/wireshark/tcpdump实战笔记(更新中...)
  13. Intellij IDEA 构建Spring Web项目 — 用户登录功能
  14. win7修复计算机消失,Win7一键修复丢失DLL,常见dll丢失一键修复方法
  15. matlab 图像分割_图像分割之阈值分割(matlab)
  16. Redis的基本操作
  17. css 设置手机浏览器背景图片填充整个页面的小问题级解决方法
  18. 西门子PLC远程监控与数据采集方案
  19. Three.js中导入GLTF模型变黑无法看到模型
  20. postgre导入dmp文件

热门文章

  1. Flask框架 请求与响应 模板语法
  2. 易误:#define SQR(X) (X)*(X)
  3. QT 定位 dmp 文件 错误
  4. TYD--mac 生成 ssh keys
  5. 实现单链表各种基本运算的算法
  6. c语言炉石传说模仿代码项目,炉石传说套牌代码功能:卡组文本编码一键导入...
  7. 【Spring Cloud Sleuth 分布式链路跟踪】 —— 每天一点小知识
  8. What’s the Time in English?
  9. 2021年N1叉车司机模拟考试及N1叉车司机复审模拟考试
  10. 数据采集系统的主要特点