🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # 1. 优化 ## 1.1 数据库设计优化 ### 1. 选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。 优先考虑数字类型,其次是日期或二进制类型,最后是字符类型。对于相同级别的数据类型,应该优先选择占用空间小的数据类型。 以上选择 主要从 下面两个角度考虑 a: 在对数据进行比较(查询条件、join 条件及排序)操作时 :同样的数据,字符处理往往比数字处理慢 b: 在数据库中,数据处理以页为单位,列的长度越小,利于提升性能。 3.2 char 和 varchar 如何选择 a: 如果列中要存储的数据长度差不多是一致的,则应该考虑用char ;否则应该考虑用varchar 。 b: 如果列中最大数据长度小于50字节,则一般也考虑用char c: 一般不宜定义大于50个字节的char类型列 ![](https://img.kancloud.cn/c6/42/c6424d4f2530965857d78d2f8a0c64ec_1214x409.png) ![](https://img.kancloud.cn/7c/c6/7cc62bed82ffb7d180db744685faabb8_1225x368.png) ## 1.2 数据库参数调优 * **索引优化** 对于大表的查询操作,索引优化是非常重要的一环。可以考虑**增加或者修改索引、使用覆盖索引、使用联合索引等方式来提高查询效率**。同时也要注意**定期清理冗余的索引以及对于经常使用的查询语句建立索引**。 * **分区优化** 将大表按照某个列分成多个分区表,每个分区表的数据量较小,可以提高查询和更新的性能。分区表还可以帮助在维护表结构的同时,减少锁表时间,提高并发处理能力。 * **数据清理归档** 对于一些历史数据或者无用数据,**可以进行定期归档,避免数据过多造成SQL查询效率降低**。同时也要注意对于大表进行定期的数据备份以及紧急数据恢复的准备工作。 * **缓存优化** 对于一些经常被查询的数据,可以使用缓存优化。使用`Redis`等缓存中间件来缓存常用的数据,以减少查询数据库的次数,提高查询效率。 * **SQL语句优化** 在编写SQL查询语句时,要尽可能地简单明了,避免复杂的查询语句,同时也要避免一些不必要的查询操作。对于复杂的查询语句,可以使用`Explain`执行计划来进行优化。同时也要注意避免使用`OR`等耗费性能的操作符。 * **分库分表** 如果数据量千万级别,需要考虑分库分表