写点什么

Mysql 大合集,你要内容的这里全都有

作者:钟奕礼
  • 2022-12-10
    湖南
  • 本文字数:2705 字

    阅读完需:约 9 分钟

什么是 MySQL?

MySQL 是由 MySQL AB 公司(目前已经被 SUN 公司收归麾下)自主研发的,目前 II 行业最流行的开放源代码的数据库管理系统之一,它同时也是一个支持多线程高并发多用户的关系型数据库管理系统。

MySQL 数据库以其简单高效可靠的特点,在最近短短几年的时间就从一个名不见经传的数据库系统,变成一个在 I 行业几乎是无人不知的开源数据库管理系统。从微型的嵌入式系统,到小型的 web 网站,至大型的企业级应用,到处都可见其身影的存在。

为什么 MySQL 这么重要?

第一,不管去面试哪家公司,数据库是必问项,而 MySQL 使用范围,无论如何是避不开的;

第二,你对 MySQL 掌握的越深入,意味着你能做的事情越多;

深入了解 Mysql

我们经常说,看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题。同样,对于 MySQL 的学习也是这样。平时我们使用数据库,看到的通常都是一个整体。比如,你有个最简单的表,表里只有一个 ID 字段,在执行下面这个查询语句时:

mysql> select * from T where ID=10;
复制代码

我们看到的只是输入一条语句,返回一个结果,却不知道这条语句在 MySQL 内部的执行

过程。

所以今天我想和你一起把 MySQL 拆解一下,看看里面都有哪些“零件”,希望借由这个

拆解过程,让你对 MySQL 有更深入的理解。这样当我们碰到 MySQL 的一些异常或者问

题时,就能够直戳本质,更为快速地定位并解决问题。

下面我给出的是 MySQL 的基本架构示意图,从中你可以清楚地看到 SQL 语句在 MySQL

的各个功能模块中的执行过程:

MySQL 的逻辑架构图

大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。


Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核

心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎

的功能都在这一层实现,比如存储过程、触发器、视图等。


而存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。现在最常用的存储引擎是 InnoDB,它从 MySQL 5.5.5 版本开始成为了默认存储引擎。


也就是说,你执行 create table 建表的时候,如果不指定引擎类型,默认使用的就是

InnoDB。不过,你也可以通过指定存储引擎的类型来选择别的引擎,比如在 create table

语句中使用 engine=memory, 来指定使用内存引擎创建表。不同存储引擎的表数据存取方

式不同,支持的功能也不同,在后面的文章中,我们会讨论到引擎的选择。

从图中不难看出,不同的存储引擎共用一个 Server 层,也就是从连接器到执行器的部分。

对于 MySQL 的学习,从基础到深入的进阶,都需要我们不断的了解学习,才能够有更多的进步。

那如何去学呢,是否有正确的指引方式,从初级到高级。不用担心,我手里有来自各种大牛总结的资料,包括《MySQL 面试专题》《MySQL 性能优化的 21 个最佳实践》《MySQL 实战笔记》《MySQL55 题》等。应有尽有,接下来我就会将这些学习笔记的精华分享给大家!下面我们就来一起看看

《MySQL55 题》:

1、一张表,里面有 ID 自增主键,当 insert 了 17 条记录之后,删除了第 15,16,17 条记录,再把 Mysq|重启,再 insert-条记录,这条记录的 ID 是 18 还是 15 ?(1)如果表的类型是 MyISAM,那么是 18 因为 MyISAM 表会把自增主键的最大 ID 记录到数据文件里,重启 MySQL 自增主键的最大 ID 也不会丢失(2)如果表的类型是 InnoDB,那么是 15InnoDB 表只是把自增主键的最大 ID 记录到内存中,所以重启数据库或者是对表进行 OPTIMIZE 操作,都会导致最大 ID 丢失 2、Mysql 的技术特点是什么?Mysql 数据库软件是一个客户端或服务器系统,其中包括:支持各种客户端程序和库的多线程 SQL 服务器、不同的后端、厂泛的应用程序编程接口和管理工具。3、Heap 表是什么?HEAP 表存在于内存中,用于临时高速存储。BLOB 或 TEXT 字段是不允许的只能使用比较运算符=,<, >,=>,=<HEAP 表不支持 AUTO_ INCREMENT 索引不可为 NULL

4、Mysql 服务器默认端口是什么?Mysql 服务器的默认端口是 3306.5、与 Oracle 相比,Mysql 有什么优势?Mysql 是开源软件,随时可用,无需付费。Mysql 是便携式的带有命令提示符的 GUI.使用 Mysql 查询浏览器支持管理 6、如何区分 FLOAT 和 DOUBLE?以下是 FLOAT 和 DOUBLE 的区别:浮点数以 8 位精度存储在 FLOAT 中,并且有四个字节。浮点数存储在 DOUBLE 中,精度为 18 位,有八个字节。7、区分 CHAR_ _LENGTH 和 LENGTH?CHAR_ LENGTH 是字符数,而 LENGTH 是字节数。Latin 字符的这两个数据是相同的,但是对于 Unicode 和其他编码,它们是不同的。

​​当然这只是一小部分由于内容太多,想获取更多更全的关于《MySQL55 题》的资料可看文末获取方法

回归正题

​​《MySQL 性能优化的 21 个最佳实践》

今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于 Web 应用尤其明显。关于数据库的性能,这并不只是 DBA 才需要担心的事,而这更是我们程序员需要去关注的事情。当我们去设计数据库表结构,对操作数据库时(尤其是查表时的 SQL 语句),我们都需要注意数据操作的性能。这里,我们不会讲过多的 SQL 语句的优化,而只是针对 MySQL 这- - Web 应用最多的数据库。希望下面的这些优化技巧对你有用。

1.为查询缓存优化你的查询

大多数的 MySQL 服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被 MySQL 的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了。

这里最主要的问题是,对于程序员来说,这个事情是很容易被忽略的。因为,我们某些查询语句会让 MySQL 不使用缓存。请看下面的示例:


上面两条 SQL 语句的差别就是 CURDATE() ,MySQL 的查询缓存对这个函数不起作用。所以,像 NOW()和 RAND()或是其它的诸如此类的 SQL 函数都不会开启查询缓存,因为这些函数的返回是会不定的易变的。所以,你所需要的就是用一个变量来代替 MySQL 的函数,从而开启缓存。

2. EXPLAIN 你的 SELECT 查询

使用 EXPLAIN 关键字可以让你知道 MySQL 是如何处理你的 SQL 语句的。这可以帮你分析你的查询语句或是表结构的性能瓶颈。

EXPLAIN 的查询结果还会告诉你你的索引主键被如何利用的,你的数据表是如何被搜索和排序....等等,等等。

挑一个你的 SELECT 语句(推荐挑选那个最复杂的,有多表联接的),把关键字 EXPLAIN 加到前面。你可以使用 phpmyadmin 来做这个事。然后,你会看到一张表格。下面的这个示例中,我们忘记加上了 group_ id 索引,并且有表联接:


我们为 group_id 字段加上索引后:


我们可以看到,前一个结果显示搜索了 7883 行,而后一个只是搜索了两个表的 9 和 16 行。查看 rows 列可以让我们找到潜在的性能问题。


小结:

还有更多关于 MySQL 的资料,由于内容太多,无法全部展示。资料已整理成文档,免费获取,需要的小伙伴可以+ VX: mxk6072

用户头像

钟奕礼

关注

还未添加个人签名 2021-03-24 加入

还未添加个人简介

评论

发布
暂无评论
Mysql大合集,你要内容的这里全都有_Java_钟奕礼_InfoQ写作社区