https://blog.csdn.net/sinat_34990639/article/details/55253144
1 mysql数据库性能优化 sql优化
- 优化目标
1 减少IO次数
2 降低cpu计算 - 优化方法
- 尽量少join
- 尽量少排序
排序会消耗较多的cpu资源,影响sql响应时间
减少排序有多种方法, 1 可以通过利用索引来排序进行优化,2 减少参与排序的记录条数,3 非必要不对数据进行排序,4 避免使用消耗资源的操作,distinct,union,minus,intersecr,order by,的sql语句会启动sql引擎执行,耗费资源的排序sort功能。
- 尽量用join代替子查询
- 尽量少or
- 尽量用union all 代替 union
- 尽量早过滤
- 尽可能对每一条运行在数据库中sql进行explain
2 mysql数据库性能优化 表结构
数字类型:
- 尽量少用double,不仅仅存储长度,还存在精确性问题
- 固定精度的小数,也不建议使用decimal,建议乘以固定倍数转换成整数存储,可以大大节省存储空间
- 能确认不会使用负数的字段,建议添加unsigned定义。
字符串类型: - 尽量少用text数据类型,其处理方式决定了他性能要低于char或者是varchar类型的处理。
- 定长字符,建议使用char,不定长建议使用varchar,且是适当的长度
时间类型: - 尽量使用timestamp类型,因为其存储空间只需要datetime类型的一半。
- 只需要精确到某一天的数据类型,建议使用date类型。因为只需要3个字节,比timestamp还少。
- 不建议通过int类型存储一个unix timestamp 的值,因为这太不直观,会带来维护的不要麻烦,还不会带来好处。
适当拆分: - 比如表中存在类似于text或者很大的把人插入类型的大字段的时候,如果大部分访问表不需要这个字段,就应该将其拆分到另外一个独立的表中,以减少常用数据所占用的存储空间
适当冗余: - 被频繁引用且只能通过join2张大表的方法才能得到的独立小字段,这样的场景造成大量不必要的IO,完全可以通过空间换取时间的方法来优化。
尽量使用nut null
3 mysql数据库性能优化 索引优化
索引的缺点:
- 索引存在额外的维护成本
- 索引存在额外的空间成本