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

2021-05-07  本文已影响0人  JAVA炭烧

什么是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 可以分为 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,那么是15
InnoDB表只是把自增主键的最大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不使用缓存。请看下面的示例:
大体来说,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,那么是15
InnoDB表只是把自增主键的最大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的函数,从而开启缓存。

  1. EXPLAIN 你的SELECT 查询

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

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

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



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


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


小结:

还有更多关于MySQL的资料,由于内容太多,无法全部展示。所以想要这些资料的,记得给我点赞后,私信我关键字[资料] 即可获得,若未及时回复,也可看下方!!!

~可加联系方式~
wechat: Mlzg5201314zz
扣扣:2967728282///
上一篇下一篇

猜你喜欢

热点阅读