MYSQL性能优化以及建议

1、业务代码组合逻辑后进行数据库操作,如根据波次进行库存分配,可以将波次里面的订单所有明细进行分组,然后匹配库存。
2、将大字段、不常用字段放置到扩展表中,将经常使用(状态、数量、编号)放到一张表中,预防经常查询所有字段带来很多网络流量开销。
3、尽量使用主键进行加锁,防止间隙锁带来锁冲突。
4、热点数据更新放到事务最后,并制定更新顺序(如库存扣减、可以通过按照主键ID、货品ID排序更新)。
5、减少大事务,可以将大事务拆分多个小的独立事务(根据业务情况确定是否可以拆分),可以从两个维度(1、节点状态变更:如分配后自动生成拣货任务,就可以拆分两个事务,通过消息队列异步处理另一个状态。2、批量数据单个执行,如选择多个波次执行一个操作,后台可以逐个波次执行)。
6、合理调节数据库最大连接数、innodb buffer大小。
7、合理使用服务器内存缓存,配合消息队列清理缓存,来减少MYSQL的配置数据访问。
8、表之间转移/归档数据,少用insert into select where语句,防止select的where未走索引,加上其他事务更新表产生死锁。
9、业务报表数据尽量通过job定时跑数据生成(业务时间加上索引,job跑最近的业务数据、或则结合RowVersion增量统计),避免直接使用复杂的SQL语句查询业务表数据。
10、对于业务系统存在定时归档/关单的表,需要做好表重建工作,减少碎片以及存储空间。
11、对于非常大的表,尽量不要查询总条数,可以通过上一页,下一页的交互方式,后台通过小技巧取一个总条数返回给前端,如当前页的记录数等于每页需要展示的最大条数,则直接将总页数+1否在,总页数就是当前的页。
12、对于只需要根据一个条件做等值查询时,可以考虑通过分表减少每张表的数据量,如出库单日志表。
13、设计主从表(一对多)时,从表的外键不要设置为可空,可能导致join走不了索引。
14、网上提到的不要使用IN操作,走不了索引的说法是错误的,具体走不走索引需要根据执行计划分析(当in后面的数据在数据表中超过一定值就不会走)。
15、条件允许(如使用了可靠性很高的云服务器,不会意外断电等)的情况下将双一配置改为双100配置,提升数据库写入性能。

Original: https://www.cnblogs.com/wangchaozhi/p/15306511.html
Author: Mr.LUCKY
Title: MYSQL性能优化以及建议

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/508132/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Jenkins初始化界面一直显示Please wait while Jenkins is getting ready to work …

    第一次访问 jenkins时,会提示如下界面: 注:如果这个界面初始化的时间过长,则需要修改相关配置文件。 原因:因为访问官网太慢。我们只需要换一个源,不使用官网的源即可。 1、找…

    数据库 2023年6月14日
    074
  • jsp规范

    jsp规范 一。jsp介绍:来自于javaee规范里面的一种jsp规范制定了如何开发jsp文件代替响应对象将处理结果写入到响应体的开发流…

    数据库 2023年6月11日
    088
  • Django设置跨域访问

    Django设置跨域访问 pip install django-cors-headers (2) settings.py 配置如下 INSTALLED_APPS = [ # ‘dj…

    数据库 2023年6月14日
    099
  • MySQL8新增降序索引

    MySQL8新增降序索引 桃花坞里桃花庵,桃花庵里桃花仙。桃花仙人种桃树,又摘桃花卖酒钱。 一、MySQL5.7 降序索引 MySQL 在语法上很早就已经支持降序索引,但实际上创建…

    数据库 2023年5月24日
    084
  • leetcode 572. Subtree of Another Tree 另一棵树的子树 (简单)

    一、题目大意 给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 fa…

    数据库 2023年6月16日
    0113
  • 记录不存在则插入,存在则更新 → MySQL 的实现方式有哪些?

    开心一刻 今天,爸爸、我和女儿一起吃了晚饭,我们每人都吃了一只鸡腿。 [En] Today, my father, me and my daughter had dinner to…

    数据库 2023年5月24日
    0104
  • 数据库操作命令

    MySQL Key Command 清屏 (滚屏 ) 登录 切换数据库 查看数据库 查看表 查看表结构 退出 帮助 Key Command 查看可用字符集 查看默认字符集 设置默认…

    数据库 2023年5月24日
    078
  • Dapper.FastCRUD与Dapper中的CustomPropertyTypeMap冲突

    在使用Dapper.NET时,由于生成的实体的属性与数据库表字段不同(如表字段叫USER_NAME,生成的对应的实体属性则为UserName)。 这时需要使用Dapper中的Cus…

    数据库 2023年6月14日
    0105
  • MySQL 视图简介

    对数据库中数据的查询有时是非常复杂的,如表连接、子查询等。这种查询很难写,而且容易出错。此外,当您专门操作表时,有时只需要操作部分字段。 [En] The query about …

    数据库 2023年5月24日
    0112
  • 安装多个Jdk

    安装 官方下载地址 目录结构: 配置 PATH 修改 注意:此处的操作可能会有其他未知的问题,最好还是理解window的命令查找机制,然后还是需要根据具体问题具体分析解决。 测试 …

    数据库 2023年6月11日
    0101
  • zabbix

    1. zabbix介绍 2. zabbix特点 3. zabbix配置文件 4. 部署zabbix zabbix介绍 zabbix是一个基于WEB界面的提供分布式系统监视以及网络监…

    数据库 2023年6月14日
    086
  • Mysql_事务_存储过程_触发器

    一、什么是事务? 事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库…

    数据库 2023年6月11日
    098
  • Java 8的新特性还不了解?快进来!

    能坚持别人不能坚持的,才能拥有你想拥有的。关注 编程大道,让我们一起成长 哈喽,大家好,我是…

    数据库 2023年6月11日
    085
  • MySQL8自增主键变化

    MySQL8自增主键变化 醉后不知天在水,满船清梦压星河。 一、简述 MySQL版本从5直接大跃进到8,相信MySQL8一定会有很多令人意想不到的改进,如果不想只会CRUD可以看看…

    数据库 2023年6月14日
    086
  • MySQL MHA 运行状态监控

    一 项目描述 1.1 背景 MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failo…

    数据库 2023年6月16日
    0117
  • Redis内存满了怎么办(新年快乐)

    Redis内存满了怎么办(新年快乐) 入我相思门,知我相思苦。 长相思兮长相忆,短相思兮无穷极。 一、配置文件 Redis长期使用或者不设置过期时间,导致内存爆满或不足,可以到Re…

    数据库 2023年6月14日
    067
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球