以下仅为个人学习过程中从各个地方了解到的知识记录,若有错误欢迎指出,谢谢
针对数据库性能测试方面,范围大致有1.sql语句方面 2.资源使用率 3.数据库的架构合理性 4.数据库的性能指标
其中,数据库架构合理性,应由开发架构设定,项目中期之后应该不会出现修改数据库架构的情况
我目前仅从sql语句的优化方面入手提高数据库的效率
连接数据库后通过show varibales like 'slow_query_log';命令查看是否开启慢查询日志
若未开启则通过set global slow_query_log=on;命令开启慢查询
通过set long_query_time = (time) 设定慢查询的阈值
通过慢查询日志可以发现有哪部分sql语句存在查询过慢的问题
找到需要优化的sql语句,在语句前添加explain,关注结果中的type是否使用了索引
具体优化数据库的方式分为五个方面:
1. 减少数据的访问量,也就是通过索引降低磁盘的访问
避免所有导致不使用索引去全表检索的语句:1有or必全有索引; 2复合索引未用左列字段; 3like以%开头; 4需要类型转换; 5where中索引列有运算; 6where中索引列使用了函数; 7如果mysql觉得全表扫描更快时(数据少)
2.返回更少的数据,也就是降低网络传输或者磁盘访问
-1.通过分页的方式处理,讲大部分图片等数据第一次访问的时候下载至本地或某位置提高载入时间
-2.查询语句仅返回需要的数据
3.降低交互次数,也就是减少网络传输
-1.通过batch操作,批量提交
-2.fetch size,数据库返回数据的时候默认是根据配置的fetch size大小返回,提高fetch size会降低交互次数,但不宜过大
-3.添加大量测试数据的时候,可把逻辑封装到存储过程中去调用,但是学习成本还是挺高的
4.减少cpu的开销
-1.sql通过软解析的形式去编写,也就是通过绑定变量的形式,对变化的值已变量参数的形式去提交,而不是在sql中直接拼写对应的值。优点是防止sql注入、提高sql可读性、提高sql解析能力。当数据库服务器的cpu出现瓶颈的时候,可以检查项目中是不是存在大量的硬解析操作。其中提高解析能力的原因是数据库会将收到的sql语句和缓存区内的sql进行比对,若有相同的sql(完全一致),则从共享池中取出sql执行计划,若不使用软解析,会导致数据库每次都创建新的执行计划
-2.合理使用排序,排序操作会占用大量cpu
-3.降低比较操作,如like这种模糊查询
-4.复杂运算,像加密算法、指数运算,应放在代码中操作,而不是sql语句中
5.物理层面,加服务器配置