叮咚!这里是玩编程的小豪哥,会记录自己的学习笔记和工作心得,让我们一起开启编程的奇妙冒险吧之旅吧~!
书写优化
一、用PreparedStatement
PreparedStatement 一般来说比Statement性能高:一个sql 发给服务器去执行,涉及步骤:语法检查、语义分析, 编译,缓存
二、避免外键约束
有外键约束会影响插入和删除性能,如果程序能够保证数据的完整性,那在设计数据库时就去掉外键。
三、sql语句全大写
特别是列名和表名都大写。利用sql命令的缓存功能,更加需要统一大小写,sql语句->发给oracle服务器->语法检查和编译成为内部指令缓存和执行指令。根据缓存的特点,不要拼凑条件,而是用
?
和
PreparedStatment
四、利用索引
经常查询,不经常修改的数据上面创建索引,但是后期要维护好
业务优化
一、数据库连接池
初始化在连接池中创建一些连接,避免了每次连接数据库都创建和销毁连接,造成资源的浪费。
二、缓存
避免与数据库的交互,减轻了服务器的压力,redis或者memcache
三、表设计适当冗余
例如:当用户下订单时,需要给用户发手机短信,这时候需要用户的手机号码,如果使用订单表和用户表联查,性能会降低,所以在订单表中创建的时候多创建一个用户ID和用户手机号的两个字段。
服务端优化
当MySQL单表记录数过大时,数据库的CRUD性能会明显下降,一些常见的优化措施如下:
一、限定数据的范围
务必禁止不带任何限制数据范围条件的查询语句。比如:我们当用户在查询订单历史的时候,我们可以控制在一个月的范围内;
二、读/写分离
经典的数据库拆分方案,主库负责写,从库负责读;
三、垂直分区
简单来说垂直拆分是指数据表列的拆分,把一张列比较多的表拆分为多张表。
例如:产品表(总表),分割成多个表(电子类产品表,衣服产品表)
四、水平分区
保持数据表结构不变,通过某种策略存储数据分片。这样每一片数据分散到不同的表或者库中,达到了分布式的目的。 水平拆分可以支撑非常大的数据量。 水平拆分是指数据表行的拆分,表的行数超过200万行时,就会变慢,这时可以把一张的表的数据拆成多张表来存放。举个例子:我们可以将用户信息表拆分成多个用户信息表,这样就可以避免单一表数据量过大对性能造成影响。
思考:分库分表之后,ID主键如何处理?
- uuid
- 不同表设置不同的自增步长
- 利用Redis生成Id
- Twitter的snowflake算法
我是 小豪哥学编程,21届校招某科技公司SP,关注我,帮助你互联网少走弯路~!
版权归原作者 小豪哥学编程 所有, 如有侵权,请联系我们删除。