MySQL架构研究及性能优化
概括
MySQL 是一个基于 C 和 C++ 编程语言开发的关系数据库管理系统,由 MySQL AB 创建,该公司由 David Axmark、Allan Larsson 和 Michael Widenius 创立。最新版本是MySQL 9.0。
MySQL 是一个具有 GNU 许可证的开源项目。
MySQL是现在最流行、最实用的数据库管理系统,因为它开源、功能齐全、性能高。
建筑学
- MySQL架构图:来源
客户端层
- MySQL系统架构第一层。
- 这一层的重要服务是连接处理、身份验证和安全。
- 连接处理:管理来自客户端的连接。当客户端想要连接到 MySQL 服务器时,会为该连接创建一个新线程。创建新连接时,服务器会缓存线程。
- 身份验证:当客户端连接到服务器时,它必须提供身份验证信息才能建立连接。通常,客户端使用用户名和密码进行身份验证。
- 安全性:MySQL 提供了很多功能来保护数据库并在身份验证后验证用户权限。
服务器层
- MySQL 的下一层负责处理查询语句并提供许多实用程序。
- 主要特点:
- 解析器:当客户端请求查询语句时,服务器对其进行分析以创建查询树,重写查询,并定义执行查询语句的顺序和索引。
- 优化器:它在执行之前优化查询语句。优化器并不关心使用什么引擎,但存储引擎会影响特定查询的优化。
- 查询缓存:查询缓存存储查询语句的结果。如果客户端再次请求相同的查询,服务器将返回缓存的结果,绕过解析和优化步骤。由于瓶颈问题,此功能在 8.0 或更高版本中已被弃用。
- 服务和实用程序:
- 备份与恢复
- 安全性:提供商用户和权限系统
- 复制:这是一个将数据从主服务器复制并同步到许多子服务器的过程。
- 集群
- 分区:使用特定逻辑将表分成许多部分。
- Workbench:它是一个可视化工具,旨在与 MySQL 交互和使用。
存储层
- 这是我们在数据库中存储数据的方式的一层责任。
- 默认情况下,MySQL 使用 InnoDB 存储引擎。
- MySQL支持许多不同的存储引擎:
- InnoDB(默认)
- MyISAM
- 记忆
- CSV
- 存档
- 黑洞
- 合并
- 联邦
优化 MySQL 性能
优化SQL语句
解释声明
- 不执行的查询预测
explain sql_statememnt
- 执行查询后解释
explain analyze sql_statement
索引技术
- 它提升了查询和搜索时的性能。
- 为多列创建索引时,第一列非常重要。它决定查询语句的性能。例如,如果您在(姓名,生日)上创建索引,则使用“姓名”列的查询将利用该索引,但使用“生日”列的查询则不会。
- 创建新索引的语法:
create index idx_birthday on customers(birthday);
- 该命令将使查询优化器无法访问指定的索引,从而阻止查询执行计划考虑它:
alter table customers alter index idx_birthday invisible;
分割
- 当数据库大小大于2GB(或超过1000万条记录)时,应该对该数据库使用分区。
- 使用分区时,性能将会提高。
- 分区计划应该基于WHERE子句中经常使用的列。
优化数据库参数
缓冲区高速缓存命中
- 它是系统从缓冲区缓存而不是从物理存储加载的数据的百分比。
- 如果百分比低于90%,那么你必须对其进行优化。
- 取决于2个参数:
- Innodb_buffer_pool_read_requests:发送到缓冲池的请求总数。命令:显示全局状态,如 '%Innodb_buffer_pool_read_requests%
- Innodb_buffer_pool_reads:内存中缓冲池中找不到的必须从磁盘读取的请求总数。命令:显示全局状态,如 '%Innodb_buffer_pool_reads%
- 计算公式:
(Innodb_buffer_pool_read_requestss - Innodb_buffer_pool_reads) x100 / Innodb_buffer_pool_read_requests
表缓存命中
- MySQL 会缓存表以便在内存中快速查询。
- 如果百分比低于80%,那么你必须对其进行优化。
- 取决于2个参数:
- Open_tables:在缓存中打开的表总数。命令:显示全局状态,如“Open_tables”
- Opened_tables:打开的表总数。命令:显示全局状态,如“Opened_tables”
- 计算公式:Open_tables/Opened_tables
表定义缓存命中
- 执行查询时,MySQL 需要有关表的信息,例如表名、列数和行数。此信息称为表定义。
- 如果百分比低于80%,那么你必须对其进行优化。
- 取决于2个参数:
- Open_table_definitions:缓存中的总定义表。命令:显示全局状态,如“Open_table_definitions”
- Opened_tables:请求的定义表总数。命令:显示全局状态,如“Opened_tables”
- 计算公式:Open_table_definitions/Opened_table_definitions
内存中的临时表
- 许多 SQL 语句(例如 Order、Group By...)必须使用临时表。
- 如果百分比低于80%,那么你必须对其进行优化。
- 取决于2个参数:
- Created_tmp_disk_tables:在磁盘上创建的临时表总数。命令:显示全局状态,如“%Created_tmp_disk_tables%”
- Created_tmp_tables:创建的临时表总数。命令:显示全局状态,如“%Created_tmp_tables%”
- 计算公式:(Created_tmp_tables - Created_tmp_disk_tables)/ Created_tmp_tables
结论
该博客提供有关 MySQL 的基于研究的知识。 MySQL 是一种关系数据库管理系统,以其低成本、广泛的实用程序和高性能而闻名,使其适用于广泛的项目。虽然本博客涵盖了 MySQL 的许多功能和方面,但还有更多内容值得探索。我将在未来的博客中更深入地研究其他功能和知识。
感谢您的阅读,我们下一篇博客见。
参考文件
- MySQL 文档
- MySQL 课程 - Tran Quoc Huy
- 维基百科 - MySQL
以上是MySQL架构研究及性能优化的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

MySQL在Web应用中的主要作用是存储和管理数据。1.MySQL高效处理用户信息、产品目录和交易记录等数据。2.通过SQL查询,开发者能从数据库提取信息生成动态内容。3.MySQL基于客户端-服务器模型工作,确保查询速度可接受。

InnoDB使用redologs和undologs确保数据一致性和可靠性。1.redologs记录数据页修改,确保崩溃恢复和事务持久性。2.undologs记录数据原始值,支持事务回滚和MVCC。

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。 MySQL以其高性能、可扩展性和跨平台支持着称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

MySQL的基本操作包括创建数据库、表格,及使用SQL进行数据的CRUD操作。1.创建数据库:CREATEDATABASEmy_first_db;2.创建表格:CREATETABLEbooks(idINTAUTO_INCREMENTPRIMARYKEY,titleVARCHAR(100)NOTNULL,authorVARCHAR(100)NOTNULL,published_yearINT);3.插入数据:INSERTINTObooks(title,author,published_year)VA

InnoDBBufferPool通过缓存数据和索引页来减少磁盘I/O,提升数据库性能。其工作原理包括:1.数据读取:从BufferPool中读取数据;2.数据写入:修改数据后写入BufferPool并定期刷新到磁盘;3.缓存管理:使用LRU算法管理缓存页;4.预读机制:提前加载相邻数据页。通过调整BufferPool大小和使用多个实例,可以优化数据库性能。

MySQL适合Web应用和内容管理系统,因其开源、高性能和易用性而受欢迎。1)与PostgreSQL相比,MySQL在简单查询和高并发读操作上表现更好。2)相较Oracle,MySQL因开源和低成本更受中小企业青睐。3)对比MicrosoftSQLServer,MySQL更适合跨平台应用。4)与MongoDB不同,MySQL更适用于结构化数据和事务处理。

MySQL通过表结构和SQL查询高效管理结构化数据,并通过外键实现表间关系。1.创建表时定义数据格式和类型。2.使用外键建立表间关系。3.通过索引和查询优化提高性能。4.定期备份和监控数据库确保数据安全和性能优化。

MySQL值得学习,因为它是强大的开源数据库管理系统,适用于数据存储、管理和分析。1)MySQL是关系型数据库,使用SQL操作数据,适合结构化数据管理。2)SQL语言是与MySQL交互的关键,支持CRUD操作。3)MySQL的工作原理包括客户端/服务器架构、存储引擎和查询优化器。4)基本用法包括创建数据库和表,高级用法涉及使用JOIN连接表。5)常见错误包括语法错误和权限问题,调试技巧包括检查语法和使用EXPLAIN命令。6)性能优化涉及使用索引、优化SQL语句和定期维护数据库。
