功能测试也可以发现数据库相关的性能问题

2021-08-06 16:13发布

很多同学认为功能测试和性能测试是严格分开的,功能测试人员无法发现性能问题。其实不是这样的,功能测试人员在验证功能时也可以发现性能问题;一些功能反而在功能测试环境不好验证,需要在性能环境上测试。

    今天咱们就说一下测试涉及数据库操作的功能时如何发现SQL语句使用不当导致的性能低的问题。主要方法就是通过EXPLAIN命令查看SQL语句的执行计划,如果执行计划中没有使用任何索引,基本上可以确认是性能问题,其他情况需要具体分析。如果开发不信,将SQL语句涉及的表格插入100万行然后执行相同的功能操作看看。

    今天的例子以Mysql数据库演示结果,其他数据库也是类似操作。

    执行explain之后结果集包含如下信息:

+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------+

|

| id | select_type | table | partitions | type | possible_keys | key | key_len | ref  | rows   | filtered | Extra |

+

+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------+

type字段解释如下表:

执行样例:

mysql> explain select * from test where id > 1;

+----+-------------+-------+-------+---------------+---------+---------+------+-------+-------------+

|

| id | select_type | table | type  | possible_keys | key     | key_len | ref  | rows  | Extra       |

+

+----+-------------+-------+-------+---------------+---------+---------+------+-------+-------------+

|

|  1 | SIMPLE      | test  | range | PRIMARY       | PRIMARY | 8       | NULL | 34252 | Using where |

+

+----+-------------+-------+-------+---------------+---------+---------+------+-------+-------------+

     大家初步使用执行计划时,可以只关注type的取值是否是ALL即可,如果是ALL就说明SQL语句执行会导致全表扫描,这种SQL语句在表记录较多时会引入性能问题。