数据库模式定义了数据库的逻辑结构,包括表、列、关系、索引以及影响数据组织和访问方式的约束。这不仅涉及数据的存储方式,还涉及数据如何与查询、事务和其他操作交互。
这些检查可以帮助您在任何新的或挥之不去的问题像滚雪球一样发展成更大的问题之前掌握它们。您可以深入研究下面的这些架构检查,并准确了解如何解决数据库未通过的问题。请记住,在进行任何架构更改之前,请务必备份数据,以防止修改期间可能发生的潜在风险。
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; </table_name>
查找服务器的默认字符集:
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; </table_name>
查找服务器的默认排序规则:
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>; </collation-name></db-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; </table_name>
如果性能不受影响,则可以安全删除索引:
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中文网其他相关文章!

MySQL适合初学者学习数据库技能。1.安装MySQL服务器和客户端工具。2.理解基本SQL查询,如SELECT。3.掌握数据操作:创建表、插入、更新、删除数据。4.学习高级技巧:子查询和窗口函数。5.调试和优化:检查语法、使用索引、避免SELECT*,并使用LIMIT。

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

MySQL是一个开源的关系型数据库管理系统,广泛应用于Web开发。它的关键特性包括:1.支持多种存储引擎,如InnoDB和MyISAM,适用于不同场景;2.提供主从复制功能,利于负载均衡和数据备份;3.通过查询优化和索引使用提高查询效率。

SQL用于与MySQL数据库交互,实现数据的增、删、改、查及数据库设计。1)SQL通过SELECT、INSERT、UPDATE、DELETE语句进行数据操作;2)使用CREATE、ALTER、DROP语句进行数据库设计和管理;3)复杂查询和数据分析通过SQL实现,提升业务决策效率。

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

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

构建MySQL数据库的步骤包括:1.创建数据库和表,2.插入数据,3.进行查询。首先,使用CREATEDATABASE和CREATETABLE语句创建数据库和表,然后用INSERTINTO语句插入数据,最后用SELECT语句查询数据。

MySQL适合初学者,因为它易用且功能强大。1.MySQL是关系型数据库,使用SQL进行CRUD操作。2.安装简单,需配置root用户密码。3.使用INSERT、UPDATE、DELETE、SELECT进行数据操作。4.复杂查询可使用ORDERBY、WHERE和JOIN。5.调试需检查语法,使用EXPLAIN分析查询。6.优化建议包括使用索引、选择合适数据类型和良好编程习惯。


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

Dreamweaver Mac版
视觉化网页开发工具

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。