【技术干货】作为测试,你必须知道的MySQL知识(二)

【技术干货】作为测试,你必须知道的MySQL知识(二),第1张

        在上一文章 《 【技术干货】作为测试,你必须知道的MySQL知识(一) 》 中我们已经学了MySQL基础知识。对于 最常用、最重要 的select语句将会在本文与大家分享,带你轻松搞定查询语句。

    学习select之前,需先知道查询语句 逻辑执行顺序 ,了解了逻辑执行顺序,对我们写select语句有帮助,但是需要注意的是,逻辑顺序并不是真正执行的顺序,因为MySQL 优化器 会将SQL子句按最优的路径执行。如果想要查看实际执行顺序,可使用Explain关键字进行分析,获取对应的执行计划。

查询语句的使用都离不开以下的格式:

需要记住,这是学好查询语句的基础~

以上select的逻辑执行顺序如下(前面的序号):

 查询语句中where后面支持多种运算符,进行条件的处理,其中常见运算符包括:比较运算、逻辑运算、模糊查询、范围查询、空判断。

① 等于: =

② 大于: >

③ 大于等于: >=

④ 小于: <

⑤ 小于等于: <=

⑥ 不等于: != 或 <>

① and

② or

③ not

【模糊查询语法】:字段名 like <匹配字段字符串>

【常见的匹配字段字符串】:%、_、[] 、[^]

① in:表示在一个非连续的范围内

② between ... and ...:表示在一个连续的范围内

① 判断为空:is null

② 判断非空:is not null

【注意】:null与''是不同的。

使用JOIN 来联合多表查询,JOIN 按照功能大致分为如下三类:

① INNER JOIN(内连接) : 获取两个表中字段匹配关系的记录。

② LEFT JOIN(左连接) : 获取左表所有记录,即使右表没有对应匹配的记录。

③ RIGHT JOIN(右连接) : 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

->【举个栗子】:对表t_user与表t_order进行内连接

->【举个栗子】:对表t_user与表t_order进行左连接

->【举个栗子】:对表t_user与表t_order进行右连接

① 内连接: 保留两表中交集的记录;

② 左连接: 左表全部保留,右表关联不上用null表示;

③ 右连接: 右表全部保留,左表关联不上的用null表示。

group by语句是根据一个或多个列对结果集进行分组。在分组的列上我们经常会使用到 聚合函数 ,因此,先了解 常用的聚合函数 :

① sum():求和

② avg():求平均数

③ count():统计记录条数

④ max():求最大值

⑤ min():求最小值

【group by语法】:

可以根据某个字段(column_name)进行分组。如果不指定分组字段,默认将所有记录作为一组。

->【举个栗子】: 在emp表中,有3个字段,一个是员工id(id),一个是部门id(dept_id),一个是员工薪水(salary)

【注意】:

①  使用group by的select语句中的字段,应该 出现在 聚合函数 中,或者 出现在 group by 中;

②  having 子句可以使用聚合函数,而 where 子句不能使用。

③从逻辑执行过程可知: where 是没有分组前对所有数据进行过滤, having 是对分组后的数据进行过滤。

子查询是指一个查询语句嵌套在另一个查询语句内部的查询。

->【举个栗子】: 一张user表,有2个字段,一个是名称(name),一个是年龄(age),查询出比小李年龄高的人有哪些?

- >【举个栗子】: 获取员工工资低于所在部门的平均工资的员工信息

    要对某个字段进行降序,可以在查询语句后可使用:order by <排序的字段名>desc

     要对某个字段进行升序,可以在查询语句后可使用:order by <排序的字段名>asc

【注意】:order by默认情况下是升序,asc可省略不写。

     有2个维度的排序时,使用逗号隔开2个排序,优先使用前者进行排序,再使用后者进行排序。

    limit:限制查询数据条数,经常在分页的场景中应用。LIMIT子句接受一个或两个参数。参数值都必须为零或正整数。limit的使用格式:

【参数解释】:

limit N :  返回 N 条记录

offset M :  跳过 M 条记录, 默认 M=0

limit N,M :  从第 N 条记录开始, 返回 M 条记录。

->【举个栗子】:

【注意】:limit的两个参数中:

① 第1个参数:指要返回的第一行的偏移量。第一行的偏移量为0,而不是1;

② 第2个参数:指要返回的记录行数。

  如上面"检索6-15行记录"例子中,第1个参数为5,其实指的是第6行;第2个参数为10,指的是从第6行开始,取10条记录,所以是获取到6-15的记录。

    当需要查询出某个字段不重复的记录时,可以使用distinct来过滤重复的记录,格式如下:

使用distinct可以进行单字段去重、多字段去重、所有字段去重、以及与聚合函数的综合使用。

-->【举个栗子】: student表中有name、age、weight3个字段字段。

    使用distinct之后,只能返回去重的字段,而不能返回其他的字段,可以使用group by进行去重查询,

【注意】:

①  distinct 只能在select语句中使用;

②   distinct 必须在所有字段的最前面;

③ 多个字段去重时,多个字段组合后一样时才会被去重;

④ 列中有null值,当对该列使用distinct子句,将保留一个null值(所有null值被视为相同的值)。

你的jdbc.properties应该是放在classpath下的,应该这样加载:

JunitTest.class.getClassLoader().getResourceAsStream("jdbc.properties")

如果你的jdbc.properties跟JunitTest放在一个文件夹下(包),可以用:

JunitTest.class.getResourceAsStream("jdbc.properties")

你应该知道二者的区别了吧:

Class.getResourceAsStream("") 会指定要加载的资源路径与当前类所在包的路径一致。

ClassLoader.getResourceAsStream("") 无论要查找的资源前面是否带'/' 都会从classpath的根路径下查找。

 有一些有用的工具可以测试MySQL 和基于MySQL 的系统的性能。这里将演示如何利用这些工具进行测试。

mysqlslap

mysqlslap可以模拟服务器的负载,并输出计时信息。它包含在MySQL 5.1 的发行包中,应该在MySQL 4.1或者更新的版本中都可以使用。测试时可以执行并发连接数,并指定SQL 语句(可以在命令行上执行,也可以把SQL 语句写入到参数文件中)。如果没有指定SQL 语句,mysqlslap 会自动生成查询schema 的SELECT 语句。

MySQL Benchmark Suite (sql-bench)

在MySQL 的发行包中也提供了一款自己的基准测试套件,可以用于在不同数据库服务器上进行比较测试。它是单线程的,主要用于测试服务器执行查询的速度。结果会显示哪种类型的 *** 作在服务器上执行得更快。

这个测试套件的主要好处是包含了大量预定义的测试,容易使用,所以可以很轻松地用于比较不同存储引擎或者不同配置的性能测试。其也可以用于高层次测试,比较两个服务器的总体性能。当然也可以只执行预定义测试的子集(例如只测试UPDATE 的性能)。这些测试大部分是CPU 密集型的,但也有些短时间的测试需要大量的磁盘I/O *** 作。

这个套件的最大缺点主要有:它是单用户模式的,测试的数据集很小且用户无法使用指定的数据,并且同一个测试多次运行的结果可能会相差很大。因为是单线程且串行执行的,所以无法测试多CPU 的能力,只能用于比较单CPU 服务器的性能差别。使用这个套件测试数据库服务器还需要Perl 和BDB 的支持,相关文档请参考.

Super Smack

Super Smack是一款用于MySQL 和PostgreSQL的基准测试工具,可以提供压力测试和负载生成。这是一个复杂而强大的工具,可以模拟多用户访问,可以加载测试数据到数据库,并支持使用随机数据填充测试表。测试定义在"smack"文件中,smack 文件使用一种简单的语法定义测试的客户端、表、查询等测试要素。

Database Test Suite

Database Test Suite 是由开源软件开发实验室(OSDL,Open Source DevelopmentLabs)设计的,发布在SourceForge 网站上,这是一款类似某些工业标准测试的测试工具集,例如由事务处理性能委员会(TPC,Transaction Processing Performance Council)制定的各种标准。特别值得一提的是,其中的dbt2 就是一款免费的TPC-C OLTP 测试工具(未认证)。之前本书作者经常使用该工具,不过现在已经使用自己研发的专用于MySQL 的测试工具替代了。

Percona's TPCC-MySQL Tool

我们开发了一个类似TPC-C 的基准测试工具集,其中有部分是专门为MySQL 测试开发的。在评估大压力下MySQL 的一些行为时,我们经常会利用这个工具进行测试(简单的测试,一般会采用sysbench 替代),在源码库中有一个简单的文档说明。

sysbench

sysbench是一款多线程系统压测工具。它可以根据影响数据库服务器性能的各种因素来评估系统的性能。例如,可以用来测试文件I/O、 *** 作系统调度器、内存分配和传输速度、POSIX 线程,以及数据库服务器等。sysbench 支持Lua 脚本语言,Lua 对于各种测试场景的设置可以非常灵活。sysbench 是我们非常喜欢的一种全能测试工具,支持MySQL、 *** 作系统和硬件的硬件测试。(节选自《高性能MySQL》)


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zaji/8571792.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-18
下一篇2023-04-18

发表评论

登录后才能评论

评论列表(0条)

    保存