30. 使用MySQL之改善性能

news/2024/11/20 1:04:17/文章来源:https://www.cnblogs.com/hisun9/p/18555930

1. 改善性能

数据库管理员把他们生命中的相当一部份时间花在了调整、试验以改善DBMS性能之上。在诊断应用的滞缓现象和性能问题时,性能不良的数据库(以及数据库查询)通常是最常见的祸因。

可以看出,下面的内容并不能完全决定MySQL的性能。只是想回顾一下前面各章的重点,提供进行性能优化探讨和分析的一个出发点。

  • 首先,MySQL(与所有DBMS一样)具有特定的硬件建议。在学习和研究MySQL时,使用任何旧的计算机作为服务器都可以。但对用于生产的服务器来说,应该坚持遵循这些硬件建议。

  • 一般来说,关键的生产DBMS应该运行在自己的专用服务器上。

  • MySQL是用一系列的默认设置预先配置的,从这些设置开始通常是很好的。但过一段时间后你可能需要调整内存分配、缓冲区大小等。(为查看当前设置,可使用SHOW VARIABLES;SHOW STATUS;。)

  • MySQL一个多用户多线程的DBMS,换言之,它经常同时执行多个任务。如果这些任务中的某一个执行缓慢,则所有请求都会执行缓慢。如果你遇到显著的性能不良,可使用SHOW PROCESSLIST显示所有活动进程(以及它们的线程ID和执行时间)。你还可以用KILL命令终结某个特定的进程(使用这个命令需要作为管理员登录)。

  • 总是有不止一种方法编写同一条SELECT语句。应该试验联结、并、子查询等,找出最佳的方法。

  • 使用EXPLAIN语句让MySQL解释它将如何执行一条SELECT语句。

  • 一般来说,存储过程执行得比一条一条地执行其中的各条MySQL语句快。

  • 应该总是使用正确的数据类型。

  • 决不要检索比需求还要多的数据。换言之,不要用SELECT *(除非你真正需要每个列)。

  • 有的操作(包括INSERT)支持一个可选的DELAYED关键字,如果使用它,将把控制立即返回给调用程序,并且一旦有可能就实际执行该操作。

插句题外话

  • DELAYED 的含义

    在支持的 SQL 操作(如 INSERT)中,使用 DELAYED 关键字可以让操作变成异步执行。也就是说,当客户端执行该操作时,MySQL 会:

    1. 立即将控制权返回给调用程序

      • 调用程序(如一个应用程序或脚本)在发送 SQL 操作后,不需要等待操作实际完成就可以继续执行其他任务。
    2. 稍后执行实际操作

      • MySQL 将操作放入一个队列中,等到目标表可用(例如当前没有其他写操作时),再实际执行该操作。
  • 工作机制

    1. 将操作加入队列

      • 使用 DELAYED 时,INSERT 操作不会立刻锁定目标表,而是将要插入的数据存储在一个内存队列中。
    2. 异步处理

      • MySQL 后台线程会在目标表可用时,从队列中取出数据并执行插入操作。
    3. 非阻塞操作

      • 这样调用程序就不用等待数据库写操作完成,提高了程序的响应速度。
  • 优点

    1. 提升响应速度

      • 对于客户端来说,DELAYED 操作立即返回,不会因为表锁或 I/O 等操作造成延迟。
    2. 适用于高并发场景

      • 特别是在高并发写入场景下,可以减少锁竞争,提升整体系统的吞吐量。
  • 缺点与限制

    1. 数据可能丢失

      • 如果服务器在队列中的数据被实际写入表之前崩溃,这些数据会丢失。
    2. 目标表的限制

      • DELAYED 只支持 MyISAM 存储引擎,不支持 InnoDB 等其他存储引擎。
    3. 实时性不高

      • 插入操作不是即时完成,因此对于需要实时写入的场景不适用。
    4. DELAYED 已被废弃

      从 MySQL 5.7.6 开始,DELAYED 关键字被废弃,不再推荐使用。

回归正题

  • 在导入数据时,应该关闭自动提交。你可能还想删除索引(包括FULLTEXT索引),然后在导入完成后再重建它们。

  • 必须索引数据库表以改善数据检索的性能。确定索引什么不是一件微不足道的任务,需要分析使用的SELECT语句以找出重复的WHERE和ORDER BY子句。如果一个简单的WHERE子句返回结果所花的时间太长,则可以断定其中使用的列(或几个列)就是需要索引的对象。

  • 你的SELECT语句中有一系列复杂的OR条件吗?通过使用多条SELECT语句和连接它们的UNION语句,你能看到极大的性能改进。

  • 索引改善数据检索的性能,但损害数据插入、删除和更新的性能。如果你有一些表,它们收集数据且不经常被搜索,则在有必要之前不要索引它们。(索引可根据需要添加和删除。)

  • LIKE很慢。一般来说,最好是使用FULLTEXT而不是LIKE

  • 数据库是不断变化的实体。一组优化良好的表一会儿后可能就面目全非了。由于表的使用和内容的更改,理想的优化和配置也会改变。

  • 最重要的规则就是,每条规则在某些条件下都会被打破。

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

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

相关文章

交互式备忘单: 汇集了各种有用的安全工具

这份工具包是一个交互式备忘单,汇集了各种有用的安全工具,主要用于渗透测试或红队练习。这些工具来自于Github仓库和其他公开来源。以下是工具列表及其分类: AD:用于Active Directory安全的工具。 BinaryExp:用于二进制漏洞利用/入侵的工具。 Blue:用于蓝队操作和防御的工…

29. 使用MySQL之数据库维护

1. 备份数据 像所有数据一样,MySQL的数据也必须经常备份。由于MySQL数据库是基于磁盘的文件,普通的备份系统和例程就能备份MySQL的数据。但是,由于这些文件总是处于打开和使用状态,普通的文件副本备份不一定总是有效。 下面列出这个问题的可能解决方案。使用命令行实用程序…

QT实现组合键监测

QT实现快捷键监测,完成某些组合键功能参考于:Qt 获取组合键 键盘按住某键 鼠标组合实现 - Andy5020 - 博客园MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);QWidget::installEventFilter(this); }bool MainW…

GitLab快速上手指南上篇

作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 目录一.gitlab的基本配置1 登录gitlab并配置汉化2 修改管理员密码3 修改头像4 关闭账号注册功能5 修改邮箱地址二.gitlab用户,组,项目管理1.用户,组,项目查看2.用户管理2.1 新建用户2.2 用户创建成功2.3 …

【springboot开发】Spring Boot3.3 内部配置与外部配置的差异及其应用

在 Spring Boot 开发中,配置管理是关键的组成部分。配置不仅影响应用程序的行为,还直接关系到应用的灵活性和可维护性。Spring Boot 提供了多种方式来管理配置,其中包括内部配置和外部配置。这两种配置方式各有其优势和应用场景,了解它们的特点和使用场景有助于在开发过程中…

DCL

创建用户通过create user 来创建用户 create user 用户名;(不带密码) create user 用户名 identified by 密码;登录用户发现他可以访问的表少,权限比较少; exit 可以退出登录 用户授权 用grant all|权限1,权限2..on 数据库.表 to 用户(with grant option)【加了括号中命…

【springboot开发】Spring Boot 配置文件高级用法

一、总体优先级顺序二、应用配置文件的详细优先级三、文件类型优先级四、特定环境配置五、配置文件高级用法六、案例: 多配置文件处理方式Spring Boot配置文件的优先级是一个重要的概念,它决定了当存在多个配置文件时,哪个配置文件中的配置将被优先采用。 一、总体优先级顺序…

【微服务】微服务中token鉴权设计的4种方式总结

一、JWT鉴权1.1 概述1.2 实现步骤1.2.1 用户登录1.2.2 存储JWT 1.2.3 请求携带JWT1.2.4 服务端验证JWT 1.3 优点 二、OAuth 2.0鉴权2.1 概述2.2 实现步骤2.2.1 授权服务器2.2.2 资源服务器 2.2.3 客户端 2.3 优点三、统一授权中心(API Gateway)3.1 概述3.2 实现步骤 3.2.1 部…

【架构】一文搞懂多规格商品、组合商品模型设计

今天聊聊多规格商品、组合商品模型设计。 一、多规格商品 1.1 什么是多规格商品 多规格商品是指同一款商品具有多个不同的规格或属性,例如颜色、尺寸、材质、容量等。这些规格使得商品能够满足不同消费者的偏好和需求。在新零售系统中,多规格商品通常会以一个商品条目展示,消…

【架构】多租户系统的核心概念模型

让我们深入探讨一下多租户系统的概念模型。概念模型是多租户系统的"骨架",帮助我们理解系统各部分的组织和运作方式。 多租户的核心概念模型 • 租户:通常指一个企业客户,不同租户之间的数据和行为是相互隔离的。• 用户:某个租户内的具体使用者,使用账号、密码…

WinForm 设计器中DPI感知错误解决方法

这张图是WinForm在1080P分辨率下开发的一个Form,但是代码到高分辨率屏幕就会变成这个鸟样虽然说可以通过DPI感知让程序在运行的时候显示出正确的样式,但是这样让我们在设计的时候很是苦恼 在翻看了WinForm微软官方在Net8的更新,发现了这样的一条:我们在项目csproj里面加入一…

安装kali purple后要做的事

1、切换中文sudo dpkg-reconfigure locales翻到最后,找到zh_cn重启搞定。 2、换源vim /etc/apt/sources.list打开后注释原来的源,换上国内源。 先用 # 把原本的注释掉: 之后,在下面添加上新的源: aliyun 阿里云 deb http://mirrors.aliyun.com/kali kali-rolling main no…