用于提升数据库性能的顶级 ySQL 架构检查
数据库模式定义了数据库的逻辑结构,包括表、列、关系、索引以及影响数据组织和访问方式的约束。这不仅涉及数据的存储方式,还涉及数据如何与查询、事务和其他操作交互。
这些检查可以帮助您在任何新的或挥之不去的问题像滚雪球一样发展成更大的问题之前掌握它们。您可以深入研究下面的这些架构检查,并准确了解如何解决数据库未通过的问题。请记住,在进行任何架构更改之前,请务必备份数据,以防止修改期间可能发生的潜在风险。
1.主键检查(缺少主键)
主键是任何表的关键部分,它唯一标识每一行并实现高效查询。如果没有主键,表可能会遇到性能问题,并且复制和架构更改实用程序等某些工具可能无法正常运行。
设计模式时定义主键可以避免几个问题:
- 如果未指定主键或唯一键,MySQL 会创建一个内部主键或唯一键,该主键或唯一键无法使用。
- 缺少主键可能会降低复制性能,尤其是基于行或混合的复制。
- 主键允许可扩展的数据归档和清除。 pt-online-schema-change 等工具需要主键或唯一键。
- 主键唯一标识行,这从应用程序的角度来看至关重要。
例子
要在创建表时在“ID”列上创建 PRIMARY KEY 约束,请使用以下 SQL:
ALTER TABLE Persons ADD PRIMARY KEY (ID);
要在多个列上定义主键:
ALTER TABLE Persons ADD CONSTRAINT PK_Person PRIMARY KEY (ID, LastName);
注意:如果使用 ALTER TABLE 命令,则在首次创建表时必须声明主键列不包含 NULL 值。
2.表引擎检查(已弃用的表引擎)
MyISAM存储引擎已被弃用,仍在使用它的表应迁移到InnoDB。由于其卓越的性能、数据恢复功能和事务支持,InnoDB 是大多数用例的默认和推荐引擎。从 MyISAM 迁移到 InnoDB 可以显着提高写入密集型应用程序的性能,提供更好的容错能力,并允许更高级的 MySQL 功能,例如全文搜索和外键。
为什么首选 InnoDB:
- 崩溃恢复功能使其能够从数据库服务器或主机崩溃中自动恢复,而不会损坏数据。
- 仅锁定受查询影响的行,从而在高并发环境中获得更好的性能。
- 将数据和索引缓存在内存中,这对于读取繁重的工作负载来说是首选。
- 完全符合 ACID,确保数据完整性并支持事务。
- InnoDB 引擎受到了 MySQL 开发社区的大部分关注,使其成为最新且支持良好的引擎。
如何迁移到InnoDB
ALTER TABLE Persons ADD PRIMARY KEY (ID);
3.表排序规则检查(混合排序规则)
跨表甚至在表内使用不同的排序规则可能会导致性能问题,特别是在字符串比较和连接期间。如果两个字符串列的排序规则不同,MySQL 可能需要在运行时转换字符串,这会阻止使用索引并减慢查询速度。
当您对混合排序规则表进行更改时,可能会出现一些问题:
- 列级别的排序规则可能不同,因此如果联接中的相关列具有匹配的排序规则,表级别的不匹配不会导致问题。
- 更改表的排序规则,尤其是使用字符集切换,并不总是那么简单。可能需要进行数据转换,并且不支持的字符可能会变成损坏的数据。
- 如果创建表时未指定排序规则或字符集,它将继承数据库默认值。如果在数据库级别未设置任何内容,则将应用服务器默认值。 为了避免这些问题,标准化整个数据集的排序规则非常重要,特别是对于连接操作中经常使用的列。
如何更改排序规则设置
在对数据库的排序规则设置进行任何更改之前,请在非生产环境中测试您的方法,以避免出现意外后果。如果您有任何不确定的地方,最好咨询 DBA。
检索所有数据库的默认字符集和排序规则:
ALTER TABLE Persons ADD CONSTRAINT PK_Person PRIMARY KEY (ID, LastName);
检查特定表的排序规则:
ALTER TABLE <table_name> ENGINE=InnoDB;
查找服务器的默认字符集:
SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM INFORMATION_SCHEMA.SCHEMATA;
查找服务器的默认排序规则:
SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_COLLATION FROM information_schema.TABLES WHERE TABLE_COLLATION IS NOT NULL ORDER BY TABLE_SCHEMA, TABLE_COLLATION;
更新特定数据库的排序规则:
SELECT @@GLOBAL.character_set_server;
更新特定表的排序规则:
SELECT @@GLOBAL.collation_server;
4.表字符集检查(混合字符集)
混合字符集与混合排序规则类似,因为它们可能会导致性能和兼容性问题。当不同的列或表使用不同的编码格式来存储数据时,就会出现混合字符集。
- 混合字符集可能会阻止索引使用或需要值转换,从而损害字符串列的连接性能。
- 可以在列级别定义字符集,只要连接涉及的列具有匹配的字符集,性能就不会受到表级别不匹配的影响。
- 更改表的字符集可能涉及数据转换,如果遇到不支持的字符,可能会导致数据损坏。
- 如果未指定字符集或排序规则,表将继承数据库的默认值,数据库将继承服务器的默认字符集和排序规则。
如何更改角色设置
在调整数据库的字符设置之前,请务必在临时环境中测试更改,以防止出现任何意外问题。如果您对任何步骤不确定,请咨询 DBA 以获得指导。
检索所有数据库的默认字符集和排序规则:
ALTER TABLE Persons ADD PRIMARY KEY (ID);
获取某列的字符集:
ALTER TABLE Persons ADD CONSTRAINT PK_Person PRIMARY KEY (ID, LastName);
查找服务器的默认字符集:
ALTER TABLE <table_name> ENGINE=InnoDB;
查找服务器的默认排序规则:
SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM INFORMATION_SCHEMA.SCHEMATA;
查看表的结构:
SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_COLLATION FROM information_schema.TABLES WHERE TABLE_COLLATION IS NOT NULL ORDER BY TABLE_SCHEMA, TABLE_COLLATION;
示例输出:
SELECT @@GLOBAL.character_set_server;
要更改列字符集:
SELECT @@GLOBAL.collation_server;
5. 列自增检查(自增列类型)
对于预计无限增长并使用主键自动递增的表,建议切换到 UNSIGNED BIGINT 数据类型。这允许列处理更大范围的值,从而防止将来达到最大值后需要进行昂贵的表更改。通过指定 UNSIGNED,仅存储正值,从而有效地将数据类型的范围加倍。
如何更改角色设置
要将列类型修改为 UNSIGNED BIGINT:
ALTER DATABASE <db-name> COLLATE=<collation-name>;
6. 表外键检查(外键是否存在)
外键通过维护父表和子表之间的关系来提供数据一致性,但它们也会影响数据库性能。每次发生写操作时,都需要进行额外的查找来验证相关数据的完整性。这可能会导致速度变慢,尤其是在高流量环境中。
如果性能是一个问题,您可能需要考虑删除外键,特别是在可以在应用程序级别处理数据一致性的场景中。
如何删除外键
从表中删除外键约束:
ALTER TABLE Persons ADD PRIMARY KEY (ID);
7. 重复索引检查
MySQL 中的重复索引会消耗不必要的磁盘空间,并在写入操作期间产生额外的开销,因为每个索引都必须更新。这可能会使查询优化复杂化,可能导致执行计划效率低下,而不会带来任何实际好处。
识别并删除重复索引以简化查询优化并减少开销。但在删除索引之前,请确保该索引没有用于关键查询。
8. 未使用的索引检查
MySQL 中未使用的索引可能会消耗磁盘空间,增加插入、更新和删除期间的处理开销,并减慢整体操作,从而对数据库性能产生负面影响。虽然索引对于加快查询速度很有价值,但不使用的索引可能会给您的系统带来不必要的压力。
删除未使用或重复的索引的其他好处包括:
- 索引越少,MySQL 优化器评估的选择就越少,从而简化查询执行并减少 CPU/内存使用。
- 删除未使用的索引可以释放宝贵的磁盘空间,可用于更关键的数据,同时提高 I/O 效率。
- 当索引数量最小化时,索引维护任务(例如重建或重新组织)会变得更快且资源占用更少。这使得操作更加顺畅,特别是在需要 24/7 正常运行时间的环境中。
要识别 MySQL 或 MariabDB 中未使用的索引,请使用以下 SQL 语句:
ALTER TABLE Persons ADD CONSTRAINT PK_Person PRIMARY KEY (ID, LastName);
如何删除未使用或重复的索引
在 MySQL 8.0 及更高版本中,您可以使索引不可见以测试它们是否需要,而无需完全删除它们:
ALTER TABLE <table_name> ENGINE=InnoDB;
如果性能不受影响,则可以安全删除索引:
SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM INFORMATION_SCHEMA.SCHEMATA;
如果需要,您可以将索引恢复为可见:
SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_COLLATION FROM information_schema.TABLES WHERE TABLE_COLLATION IS NOT NULL ORDER BY TABLE_SCHEMA, TABLE_COLLATION;
Releem 现已提供架构检查
通过最新更新,Releem 现在包含全面的架构健康检查。这些检查可以实时洞察数据库的结构完整性,并提供修复任何检测到的问题的可行建议。
通过自动化模式监控过程,Releem 消除了手动检查中的猜测,为数据库工程师节省了大量的时间和精力。您现在可以专注于更紧迫的任务,而不是花费大量时间处理架构细节。
以上是用于提升数据库性能的顶级 ySQL 架构检查的详细内容。更多信息请关注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语句和定期维护数据库。
