数据库优化建议

尽量控制单表数据量的大小,建议控制在 500 万以内

  • 500 万并不是 MySQL 数据库的限制,过大会造成修改表结构,备份,恢复都会有很大的问题。
  • 可以用历史数据归档(应用于日志数据),分库分表(应用于业务数据)等手段来控制数据量大小

谨慎使用 MySQL 分区表

  • 分区表在物理上表现为多个文件,在逻辑上表现为一个表;

  • 谨慎选择分区键,跨分区查询效率可能更低;

  • 建议采用物理分表的方式管理大数据。

经常一起使用的列放到一个表中

  • 避免更多的关联操作。

禁止在表中建立预留字段

  • 预留字段的命名很难做到见名识义。
  • 预留字段无法确认存储的数据类型,所以无法选择合适的类型。
  • 对预留字段类型的修改,会对表进行锁定。

禁止在数据库中存储文件(比如图片)这类大的二进制数据

  • 在数据库中存储文件会严重影响数据库性能,消耗过多存储空间。
  • 文件(比如图片)这类大的二进制数据通常存储于文件服务器,数据库只存储文件地址信息。

不要被数据库范式所束缚

  • 一般来说,设计关系数据库时需要满足第三范式,但为了满足第三范式,我们可能会拆分出多张表。而在进行查询时需要对多张表进行关联查询,有时为了提高查询效率,会降低范式的要求,在表中保存一定的冗余信息,也叫做反范式。但要注意反范式一定要适度。

禁止在线上做数据库压力测试

禁止从开发环境,测试环境直接连接生产环境数据库

  • 安全隐患极大,要对生产环境抱有敬畏之心!

单表不要包含过多字段

  • 如果一个表包含过多字段的话,可以考虑将其分解成多个表,必要时增加中间表进行关联。

限制每张表上的索引数量,建议单张表索引不超过 5 个

  • 索引并不是越多越好!索引可以提高效率同样可以降低效率。

  • 索引可以增加查询效率,但同样也会降低插入和更新的效率,甚至有些情况下会降低查询效率。

  • 因为 MySQL优化器在选择如何优化查询时,会根据统一信息,对每一个可以用到的索引来进行评估,以生成出一个最好的执行计划,如果同时有很多个索引都可以用于查询,就会增加MySQL 优化器生成执行计划的时间,同样会降低查询性能。

禁止使用全文索引

  • 全文索引不适用于 OLTP 场景。

禁止给表中的每一列都建立单独的索引

  • 5.6 版本之前,一个 sql 只能使用到一个表中的一个索引,5.6 以后,虽然有了合并索引的优化方式,但是还是远远没有使用一个联合索引的查询方式好。

每个 InnoDB 表必须有个主键

  • InnoDB 是一种索引组织表:数据的存储的逻辑顺序和索引的顺序是相同的。

  • 每个表都可以有多个索引,但是表的存储顺序只能有一种。

  • InnoDB 是按照主键索引的顺序来组织表的

  • 不要使用更新频繁的列作为主键,不使用多列主键(相当于联合索引)

  • 不要使用 UUID,MD5,HASH,字符串列作为主键(无法保证数据的顺序增长)

  • 主键建议使用自增 ID 值

常见索引列建议

  • 出现在 SELECT、UPDATE、DELETE 语句的 WHERE 从句中的列
  • 包含在 ORDER BY、GROUP BY、DISTINCT 中的字段
  • 并不要将符合 1 和 2 中的字段的列都建立一个索引, 通常将 1、2 中的字段建立联合索引效果更好
  • 多表 join 的关联列

尽量不在数据库做运算,复杂运算需移到业务应用里完成

  • 尽量不在数据库做运算,复杂运算需移到业务应用里完成。这样可以避免数据库的负担过重,影响数据库的性能和稳定性。数据库的主要作用是存储和管理数据,而不是处理数据。

优化对性能影响较大的 SQL 语句

  • 要找到最需要优化的 SQL 语句。要么是使用最频繁的语句,要么是优化后提高最明显的语句,可以通过查询 MySQL
    的慢查询日志来发现需要进行优化的 SQL 语句。

充分利用表上已经存在的索引

  • 避免使用双%号的查询条件。如:a like ‘%123%’,(如果无前置%,只有后置%,是可以用到列上的索引的)
  • 一个 SQL 只能利用到复合索引中的一列进行范围查询。如:有 a,b,c 列的联合索引,在查询条件中有 a 列的范围查询,则在 b,c
    列上的索引将不会被用到。
  • 在定义联合索引时,如果 a 列要用到范围查找的话,就要把 a 列放到联合索引的右侧,使用 left join 或 not exists
    来优化 not in 操作,因为 not in 也通常会使用索引失效。

禁止使用 SELECT * 必须使用 SELECT <字段列表> 查询

  • SELECT * 会消耗更多的 CPU。

  • SELECT * 无用字段增加网络带宽资源消耗,增加数据传输时间,尤其是大字段(如 varchar、blob、text)。

  • SELECT * 无法使用 MySQL 优化器覆盖索引的优化(基于 MySQL
    优化器的“覆盖索引”策略又是速度极快,效率极高,业界极为推荐的查询优化方式)

  • SELECT <字段列表> 可减少表结构变更带来的影响

避免数据类型的隐式转换

  • 隐式转换会导致索引失效

避免使用子查询,可以把子查询优化为 join 操作

  • 通常子查询在 in 子句中,且子查询中为简单 SQL(不包含 uniongroup byorder bylimit 从句)时,才可以把子查询转化为关联查询进行优化。

对应同一列进行 or 判断时,使用 in 代替 or

  • in 的值不要超过 500 个,in 操作可以更有效的利用索引,or 大多数情况下很少能利用到索引

WHERE 从句中禁止对列进行函数转换和计算

  • 对列进行函数转换或计算时会导致无法使用索引

明显不会有重复值时使用 UNION ALL 而不是 UNION

  • UNION 会把两个结果集的所有数据放到临时表中后再进行去重操作

  • UNION ALL 不会再对结果集进行去重操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/711138.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里开源的Java诊断利器Arthas

一.什么是Arthas 1.为什么需要Arthas 通常&#xff0c;本地开发环境无法访问生产环境。如果在生产环境中遇到问题&#xff0c;则无法使用 IDE 远程调试。更糟糕的是&#xff0c;在生产环境中调试是不可接受的&#xff0c;因为它会暂停所有线程&#xff0c;导致服务暂停。 开…

探索Apple Vision Pro:创新技术带来的多彩应用世界

Apple Vision Pro是一款具有前沿技术的设备,可以与现实世界进行交互,让用户在虚拟世界中享受各种应用。以下是一些值得注意的Vision Pro应用: AR演示环境:Vision Pro上的AR应用主要是基于AR的演示环境,这些应用可以让用户在现实世界中体验虚拟世界。游戏:Vision Pro上有一…

c语言统计字符

本题要求编写程序&#xff0c;输入10个字符&#xff0c;统计其中英文字母、空格或回车、数字字符和其他字符的个数。 输入格式: 输入为10个字符。最后一个回车表示输入结束&#xff0c;不算在内。 输出格式: 在一行内按照 letter 英文字母个数, blank 空格或回车个数, d…

鸿蒙Harmony应用开发—ArkTS声明式开发(鼠标事件)

在鼠标的单个动作触发多个事件时&#xff0c;事件的顺序是固定的&#xff0c;鼠标事件默认透传。 说明&#xff1a; 从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。目前仅支持通过外接鼠标触发。 onHover onHover(event: …

vue中element-ui中的el-button自定义icon图标

实现&#xff1a; button的icon属性自定义一个图标名称&#xff0c;这个自定义的图标名称会默认添加到button下i标签的class上&#xff0c;我们只需要设置i标签的样式就可以了。 1. 控制台显示的代码 2 .图片展示 3. 按钮上使用自定义的icon 完整代码&#xff1a; <el-but…

postman切换成黑色主题

postman安装以后默认是白色背景&#xff0c;如果想要切换成黑色的&#xff0c;大家可以按照下图箭头指示来操作。 1打开设置 2在Themes页面选择黑色主题

物联网常见协议篇

在物联网环境中&#xff0c;物联网协议承担着关键作用&#xff0c;而新手了解物联网协议如传输协议、通讯协议和行业协议等。 一、物联网协议 物联网协议是物联网环境中的关键组成部分&#xff0c;它承担着设备间通信和数据传输的重要任务。这些协议根据其作用的不同&#xff…

Day06:基础入门-抓包技术HTTPS协议APP小程序PC应用WEB转发联动

目录 HTTP/HTTPS协议抓包工具 Web浏览器抓包 APP应用抓包 WX小程序&PC应用抓包 思维导图 章节知识点&#xff1a; 应用架构&#xff1a;Web/APP/云应用/三方服务/负载均衡等 安全产品&#xff1a;CDN/WAF/IDS/IPS/蜜罐/防火墙/杀毒等 渗透命令&#xff1a;文件上传下载…

关于webpack的一些记录

文章目录 webpack基础配置开发模式的一些配置实际生产的一些优化提升开发体验提升打包构建速度减少代码体积优化代码运行性能 webpack 是一个用于现代 JavaScript 应用程序的静态模块打包工具。当 webpack 处理应用程序时&#xff0c;它会在内部构建一个依赖图(dependency grap…

最佳实践:Websocket 长连接状态如何保持

WebSocket 是一种支持通过单个 TCP 连接进行全双工通信的协议&#xff0c;相较于传统的 HTTP 协议&#xff0c;它更适合需要实时交互的应用场景。此协议在现代 Web 应用中扮演着至关重要的角色&#xff0c;尤其是在需要实时更新和通信的场合下维持持久连接。本文将探讨 WebSock…

图神经网络/生物信息交叉 Paper reading

目录 1. SMILES字符串 2. 利用图马尔可夫神经网络&#xff08;GMNN&#xff09;来进行关联性预测 3. 图池化算法 4. 合成致死性&#xff08;SL&#xff09;预测 5. 蛋白质溶解度研究 6. 药物疾病关联预测&#xff08;DAA&#xff09; 7. tRNA-疾病关系预测 8.异构体功能…

安卓手机安装termux、kali linux及基本配置

相关阅读&#xff1a;Termux 高级终端安装使用配置教程 | 国光 百度安全验证 该文安装的 kali liunx 应该是简易版的&#xff0c;没有相关工具 一、下载安装termux 建议通过 f-droid 应用市场下载链接termux&#xff0c;点击即直接下载。 二、配置termux 1.更换镜像源 te…

如何访问内网服务器?

访问内网服务器是在网络架构中常见的需求。内网服务器是指在一个局域网中运行的服务器&#xff0c;可以提供各种服务&#xff0c;如文件共享、网站托管等。由于安全性的考虑&#xff0c;内网服务器一般不直接暴露在公网中&#xff0c;所以需要通过特定的方法来访问。 一种常见的…

1. 开发环境搭建

文章目录 前端 前后端分离项目 前端&#xff1a;管理端web页面 &#xff0c; 用户端小程序后端&#xff1a;SpringBoot 前端 基于Nginx运行

TypeError: `dumps_kwargs` keyword arguments are no longer supported

TypeError: dumps_kwargs keyword arguments are no longer supported 1. 问题描述2. 解决方法 1. 问题描述 使用 FastChat 启动私有大语言模型&#xff0c;通过一些 UI 工具进行访问时&#xff0c;报以下错误。 略 2024-02-29 09:26:14 | ERROR | stderr | yield f"…

基于语义解析的KBQA——代码和论文详细分析

根据论文&#xff1a;Semantic Parsing on Freebase from Question-Answer Pairs&#xff0c;分析其代码和步骤&#xff0c;以加强对这一流程的深入理解&#xff0c;重点关注模型的输入、输出和具体方法。 前言 提供阅读本文的前提知识&#xff0c;引用自Semantic Parsing on…

Java实战:Spring Boot实现WebSocket实时通信

本文将详细介绍如何在Spring Boot应用程序中实现WebSocket实时通信。我们将探讨WebSocket的基本概念&#xff0c;以及如何使用Spring Boot和Spring WebSocket模块来实现WebSocket服务器和客户端。此外&#xff0c;我们将通过具体的示例来展示如何在Spring Boot应用程序中配置和…

【探索AI】十二 深度学习之第2周:深度神经网络(一)深度神经网络的结构与设计

第2周&#xff1a;深度神经网络 将从以下几个部分开始学习&#xff0c;第1周的概述有需要详细讲解的的同学自行百度&#xff1b; 深度神经网络的结构与设计 深度学习的参数初始化策略 过拟合与正则化技术 批标准化与Dropout 实践&#xff1a;使用深度学习框架构建简单的深度神…

《More Effective C++》- 极精简版 1-10条

本文章属于专栏《业界Cpp进阶建议整理》 本文列出《More Effective C》的1-10条的个人理解的极精简版本。 1、仔细区分pointers和references 使用引用的情况&#xff1a; 一旦代表的该对象就不能改变&#xff0c;应该选择reference&#xff08;优势是使用时不需要判是否空&…

微信小程序的医院食堂订餐系统uniapp+vue+springboot/django/php

针对患者订餐的管理现状&#xff0c;本微信小程序的患者订餐主要实现以下几个目标&#xff1a; 1.系统界面简洁&#xff0c;操作简便。 2.拥有精准&#xff0c;高效的查询功能。 3.能使管理人员能够及时的获得精确的信息。 4.对数据内容的管理安全&#xff0c;…