MySQL 数据库性能优化,看这篇就够了

Posted 实验楼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 数据库性能优化,看这篇就够了相关的知识,希望对你有一定的参考价值。

无论是运维、开发、测试,还是架构师,数据库技术是一个必备加薪神器。

mysql 由于免费,而且性能强劲,是目前使用最广泛的数据库产品,同时也是入门门槛最低的数据库产品之一。更重要的是,掌握了 MySQL,会为你以后学习其他数据库产品打下坚实的基础。

今天给大家带来一门?MySQL 数据库的进阶实战教程,将重点讲解?MySQL 的一些高级特性,以及对数据库查询的性能优化。学习完本课程的同学会掌握数据库运维的相关知识,多表联合查询,日志的使用等数据库的进阶知识。

技术图片

课程地址: MySQL 数据库进阶实战


下面来学习一下?MySQL 数据库和数据表的基本操作:

实验介绍

在本节实验中,将会学习如何启动和连接服务器,如何对数据库进行操作,如何创建数据表和在表中添加数据,以及如何检索表中的数据。

知识点

  • MySQL 的安装与启动
  • MySQL 的连接与断开
  • 数据库的操作
  • 数据表的操作

MySQL 介绍

MySQL 是一个关系型数据库管理系统,由瑞典 MySQLAB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统,在 Web 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。

由于配置不同,在安装 MySQL 的过程中可能会导致一些问题。所以,就不讲解安装过程了。需要在本地安装的同学,可以在?在 Windows 下安装?和?在 Linux 下安装的官方页面自行安装。

启动与连接服务器

在实验中使用的 IDE 已经为大家安装好 MySQL,无需自行安装。请同学们打开你们的桌面环境,点击桌面上的 Xfce 终端。

如果觉得终端窗口太小,可以在视图中设置全屏模式。在编辑中,大家可以根据自己的喜好设置字体大小,背景颜色和代码颜色等。

首先启动服务器,输入命令如下所示。

sudo service mysql start

运行结果如下图所示,说明服务器启动成功。

技术图片

然后连接服务器,为了连接服务器,当调用 mysql 时,通常需要提供一个 MySQL 用户名并且很可能需要一个密码。在这里我们使用?root?用户连接服务器(密码环境设置为空,无需我们输入密码),输入以下命令连接服务器。

mysql -u root

显示如下图,说明服务器启动成功。

技术图片

成功连接服务器后,可以在?mysql>?提示下输入?QUIT?或?EXIT?断开连接。

数据库的操作

首先创建数据库,其语法格式为?CREATE DATABASE <数据库名字>

例如,我们创建一个名为?mysql_test?的数据库。

CREATE DATABASE mysql_test;

创建后的输出如下,说明创建成功。

技术图片

用?SHOW DATABASES?来查看当前存在的所有数据库。

SHOW DATABASES;

我们能够在数据库表中看到?mysql_test?这个数据库的名字。

技术图片

当创建成功后,我们需要让?USE <数据库名字>?这个命令执行后,才能够使用该数据库。

USE mysql_test

技术图片

若你不想要这个数据库了,可以使用?DROP DATABASE <数据库名字>?来删除指定数据库。

例如,删除刚才创建的名为?mysql_test?的数据库。

DROP DATABASE mysql_test;

技术图片

数据表的操作

数据库就像一个衣柜,而衣柜里的小隔间就像空的数据表,在每个小隔间中放入不同类型的衣物,就像我们在数据表中添加数据。接下来我们就学习一下,如何使用数据表吧。

现在,我们使用?CREATE TABLE <数据表名>?在数据库中创建数据表。

创建数据表的语法格式如下所示。

CREATE TABLE <表名>(
<字段名1> <数据类型>(<数据长度>),
<字段名2> <数据类型>(<数据长度>),
....
<字段名n> <数据类型>(<数据长度>)
);

例如,我们创建一个名为?gradesystem?的数据库,我们在该数据库中,创建名为student?的数据表,表中包括学号 ID、学生姓名、性别信息。

# 创建名为 student 的数据表,包含 id,stu_name,gender

CREATE TABLE student(id int(10),stu_name char(20),gender char(10));

显示如下图所示,说明创建成功。

技术图片

然后再创建一张名为?mark?的表,表中包含学生 id 、课程名字和分数,为了让代码看起来更加的整洁美观,您可以分行输入,如下所示。

# 创建名为 mark 的数据表

CREATE TABLE mark
(
    id int(10), # 学生 id
    name char(20), # 课程名
    grade int(10) # 课程分数
);

技术图片

创建数据表后,使用?SHOW TABLES?来查看一下,我们能够看到刚才创建的两张数据表的名字。

SHOW TABLES; # 查询所有数据表

技术图片

使用?DESCRIBE <数据表名字>?来查看创建数据表的完整信息。

例如,我们查看一下数据表?student?的完整信息。

DESCRIBE student;

技术图片

从上图中我们可以看到刚才创建的三个字段名,int 和 char 是 MySQL 的两种数据类型,MySQL 的数据类型有很多,不熟悉的同学,可以看一下 MySQL 的数据类型。

在图中 Null 全都为 YES,那是因为我们没有指定列名为非空。若我们指定列名为NOT NULL,则会显示 NO,如下所示。

技术图片

到此,我们已经在数据库中建立了两张数据表。接着我们需要在表中添加数据。在表中添加数据,有?LOAD DATA?和?INSERT?两种方式。

  • LOAD DATA?是一次可以添加多条数据,可以把文本文件中的数据直接加载到数据表中。
  • INSERT?是一次增加一条新的数据。

使用?LOAD DATA?加载数据,语句格式为:

LOAD DATA INFILE ‘加载数据文件的路径‘ INTO TABLE 表名;

使用?INSERT?语句向表中插入数据,语句格式为:

INSERT INTO 表的名字(字段名1,字段名2,字段名3) VALUES(值1,值2,值3);

例如,我们用?INSERT?语句向?student?和?mark?表中分别添加数据。

在?student?表中插入了四条完整的学生信息数据,如下所示。

INSERT INTO student(id,stu_name,gender) VALUES(01,‘Jack‘,‘male‘);
INSERT INTO student(id,stu_name,gender) VALUES(02,‘Candy‘,‘male‘);
INSERT INTO student(id,stu_name,gender) VALUES(01,‘Rose‘,‘Female‘);
INSERT INTO student VALUES(04,‘Ann‘,‘Famale‘);

值得注意的是,当我们插入的数据不完整时,列名对应位置会显示为 NULL。我们尽量不要在表格中留有空值,因为空值会降低查询的性能。我们可以使用数字 0 去代替 NULL,关于空值的处理在后面的实验中会讲解。

插入数据后,我们使用?SELECT?语句来查看表中的完整信息。语法格式为:SELECT * FROM <数据表名>

技术图片

再向?mark?表中插入数据,如下所示。

INSERT INTO mark(id,name,grade) VALUES(01,‘C++‘,90);
INSERT INTO mark VALUES(02,‘C++‘,80);
INSERT INTO mark VALUES(03,‘JAVA‘,90);
INSERT INTO mark VALUES(04,‘JAVA‘,50);

从代码中我们可以知道,像名字这样?CHAR?类型的数据,我们需要用引号去修饰。除了 CHAR 类型,还有?VARCHARTEXTDATETIMEENUM等类型的数据也需要用单引号修饰。

技术图片

用 SELECT 语句查看一下数据是否成功添加到数据表中。

技术图片

数据表的查询操作

检索特定行的数据

检索特定行的数据是通过条件限制去查询符合设定条件的一行或者多行数据。

我们使用?SELECT * FROM <表名> WHERE <条件>?来查询特定行的数据。

例如,我们查询一下在?student?表中,学生姓名为?Ann?的学生信息。

SELECT * FROM student WHERE stu_name = ‘Ann‘;

技术图片

检索特定列的数据

检索特定列的数据就是通过指定字段名来查询表中某些列的数据。我们可以使用SELECT <字段名> FROM <表名>?来查询,这里可以写入多个列名,用逗号隔开即可。

例如,我们查询一下在?student?表中,所有学生的姓名。

SELECT stu_name FROM student;

技术图片

同时检索特定行和列的数据

同时检索特定行和列的数据相当于前面两种的结合体,我们可以使用?SELECT <字段名> FROM <表名> WHERE <条件>?来同时进行特定行和列的数据选择。

例如,我们可以查询一下,在?mark?表中,学生分数小于 90 分的成绩。

SELECT grade FROM mark WHERE grade < 90;

技术图片

排序检索数据

我们可以对数据进行排序检索,例如在检索学生成绩时,我们可以对学生成绩进行排序,这样使得查询结果更加清晰。

使用?OREDER BY <字段名>?可实现对一列或者多列数据进行排序操作。该排序默认是升序,我们可以在其后添加关键字?DESC?变成降序。

例如,对?mark?表中,学生的成绩进行排序。

SELECT grade FROM mark ORDER BY grade;

技术图片

最后,我们可以把不想要的数据表给删除了。可以使用?DROP TABLE <表名>?来删除整个表,包括表中的数据和表的结构。

例如,我们将?student?表删除。

技术图片

如果想要保留表的结构,只是清空表中的数据,那么我们可以使用?TRUNCATE TABLE <表名>

还可以使用?DELETE FROM <表名> WHERE <字段名>?来删除指定行的数据。

实验总结

在本节实验中,我们学习了 MySQL 服务器的启动与连接,创建并使用数据库,创建数据表并在表中添加数据,以及查询表中数据的一些 SELECT 语句,包括行检索、列检索、排序检索等操作。

后续课程中,你还可以学到:

技术图片

点击课程链接,学习完整课程内容~

以上是关于MySQL 数据库性能优化,看这篇就够了的主要内容,如果未能解决你的问题,请参考以下文章

学会MySQL主从复制读写分离,看这篇就够了

超全面的Android性能分析与优化解决方案,啃透性能优化看这篇就够了!

想了解Xtrabackup备份原理和常见问题分析,看这篇就够了

大厂面试官必问的 MySQL 索引等等问题,看这篇就够了!

前端面经 - 看这篇就够了(笔者靠这个拿到阿里和字节的offer)

MySQL索引从基础到原理,看这一篇就够了