0


面试官:你做过哪些Mysql优化?

叮咚!这里是玩编程的小豪哥,会记录自己的学习笔记和工作心得,让我们一起开启编程的奇妙冒险吧之旅吧~!

在这里插入图片描述

书写优化

一、用PreparedStatement

PreparedStatement 一般来说比Statement性能高:一个sql 发给服务器去执行,涉及步骤:语法检查、语义分析, 编译,缓存

二、避免外键约束

有外键约束会影响插入和删除性能,如果程序能够保证数据的完整性,那在设计数据库时就去掉外键。

三、sql语句全大写

特别是列名和表名都大写。利用sql命令的缓存功能,更加需要统一大小写,sql语句->发给oracle服务器->语法检查和编译成为内部指令缓存和执行指令。根据缓存的特点,不要拼凑条件,而是用

?

PreparedStatment

四、利用索引

经常查询,不经常修改的数据上面创建索引,但是后期要维护好

业务优化

一、数据库连接池

初始化在连接池中创建一些连接,避免了每次连接数据库都创建和销毁连接,造成资源的浪费。

二、缓存

避免与数据库的交互,减轻了服务器的压力,redis或者memcache

三、表设计适当冗余

例如:当用户下订单时,需要给用户发手机短信,这时候需要用户的手机号码,如果使用订单表和用户表联查,性能会降低,所以在订单表中创建的时候多创建一个用户ID和用户手机号的两个字段。

服务端优化

当MySQL单表记录数过大时,数据库的CRUD性能会明显下降,一些常见的优化措施如下:

一、限定数据的范围

务必禁止不带任何限制数据范围条件的查询语句。比如:我们当用户在查询订单历史的时候,我们可以控制在一个月的范围内;

二、读/写分离

经典的数据库拆分方案,主库负责写,从库负责读;

三、垂直分区

简单来说垂直拆分是指数据表列的拆分,把一张列比较多的表拆分为多张表。

例如:产品表(总表),分割成多个表(电子类产品表,衣服产品表)

四、水平分区

保持数据表结构不变,通过某种策略存储数据分片。这样每一片数据分散到不同的表或者库中,达到了分布式的目的。 水平拆分可以支撑非常大的数据量。 水平拆分是指数据表行的拆分,表的行数超过200万行时,就会变慢,这时可以把一张的表的数据拆成多张表来存放。举个例子:我们可以将用户信息表拆分成多个用户信息表,这样就可以避免单一表数据量过大对性能造成影响。

思考:分库分表之后,ID主键如何处理?

  • uuid
  • 不同表设置不同的自增步长
  • 利用Redis生成Id
  • Twitter的snowflake算法

我是 小豪哥学编程,21届校招某科技公司SP,关注我,帮助你互联网少走弯路~!

标签: mysql 数据库 sql

本文转载自: https://blog.csdn.net/qq_43496316/article/details/122785330
版权归原作者 小豪哥学编程 所有, 如有侵权,请联系我们删除。

“面试官:你做过哪些Mysql优化?”的评论:

还没有评论