概述
压测过程中我们主要压的是应用程序和数据库sql。如果性能瓶颈在数据库这,数据库操作系统指标负载高、应用程序的操作系统负载指标正常 但 应用程序的响应时间大。通过mysql的myslqdumpslow自带慢查工具查询慢sql,首先分析sql执行计划是否有全表扫描、索引失效的问题去优化,然后考虑换个性能优良的磁盘、分库分表、优化代码等方式提高性能。
详解(优化代码)
开启数据库慢sql日志,找出查询效率比较低的sql并分析。
表设计是否合理:
1)是否符合三范式
- 保证原子性(不可拆分)
- 每张表都有主键
- 每列数据都与主键相关
2)是否有冗余字段
3)java中尽量使用varchar代理char的建表数据类型,能用数值的绝对不用字符存储
4)尽量避免null值,使用默认值替代空值数字使用0字符串使用空串
查看sql语句是否规范:
1)避免使用or、in、not in、!=、<>、select *
2) 尽量避免使用子查询大部分子查询都可以连接查询
3)用到 or 的地方可以用 union 去代替实现
4)用到 in 的地方可以用 exists 去实现
sql索引是否用上
1)explain 查询sql执行计划,重点关注的几个列可就是,看下type是否全表扫描
2)看下索引是否能够用上,主要看key使用的是哪个索引
3)看下rows扫描行数是不是很大
面试常见问题
1)什么是索引?
2)建立索引的优缺点。
3)索引有哪些?
4)索引为什么快?
5)你们一般在什么情况下加索引
6)怎么知道索引没有用上?
7)用过组合索引吗?是否有序
8)什么情况下索引会失效
9)sql优化你们是怎么做的?查看上面详情内容
参考链接:
https://blog.csdn.net/qq_25502749/article/details/100034186
https://blog.csdn.net/qq_34581118/article/details/75568530?ref=myread
https://www.cnblogs.com/soundcode/p/4454292.html
https://blog.csdn.net/u014421556/article/details/52597240
https://www.cnblogs.com/hyunbar/p/11185095.html