InnoDB的使用限制有哪些

InnoDB的使用限制有哪些

以下是一些使用InnoDB在使用中的限制,包含InnoDb表,索引,表空间,和InnoDB存储引擎其他方面的各种限制。

一个表最多包含1017列字段,虚拟生成的列也包含在这个限制中。

每个表的元数据需要在内存中维护其结构,过多的列会增加内存消耗和管理复杂度。同时,SQL查询处理和优化器的效率也可能因此受到影响。此外,虽然理论上允许有这么多列,但在实际应用中,拥有成百上千个列的表很少见,并且通常不推荐这样设计数据库,因为这可能会导致数据库性能问题和维护难度。

虚拟生成列(也称为计算列或派生列)是一种在MySQL中定义的特殊列,其值不是直接存储的,而是通过其他列的值计算得出。虚拟列的值在每次查询时都会动态计算,而不是在数据库中持久存储。这种类型的列特别有用于存储那些从其他列派生的结果,如执行数学运算、字符串操作或转换数据类型的结果。

在MySQL中创建虚拟生成列的语法如下:

CREATE TABLE example (
    id INT,
    price DECIMAL(10,2),
    quantity INT,
    total_cost AS (price * quantity) VIRTUAL
);

在上述示例中,total_cost是一个虚拟生成列,它通过计算pricequantity的乘积来动态生成其值。该列被标记为VIRTUAL,表示其值不会在表中持久存储,而是在每次访问时计算。

一个表最多包含64个二级索引

二级索引,也称为非聚集索引,是指不改变表中数据物理存储顺序的索引。每增加一个索引,都会占用额外的存储空间,并且更新表中数据时,相关的索引也需要被更新,这会增加写操作的负担。限制索引的数量有助于平衡查询性能与维护成本。对于大多数应用来说,64个索引已经足够使用,过多的索引可能会导致管理和性能的问题。

二级索引(也称为非聚集索引)是指不按数据的物理顺序,而是按照一个或多个列的值来排序和存储的索引。在数据库中,二级索引使得不需要按照主键排序的查询可以更快地执行,因为它提供了对表中数据的另一种查找方式。

例如,假设有一个用户表,主键是用户ID,但我们经常需要按照用户名来查找用户。在这种情况下,用户名上的二级索引将会很有帮助:

CREATE TABLE users (
    user_id INT PRIMARY KEY,
    username VARCHAR(50),
    email VARCHAR(100)
);

CREATE INDEX idx_username ON users(username);

在这个例子中,idx_username是一个二级索引,它帮助数据库快速地根据用户名来查找用户,而不需要扫描整个表。

使用DYNAMIC或者COMPRESSED行格式的表,前缀索引的长度被限制在3072字节

InnoDB存储引擎提供了几种不同的行格式,用于优化表的存储和性能,其中DYNAMICCOMPRESSED是两种常见的选择。

  • DYNAMIC行格式:这种格式为表中的可变长度字段(如VARCHAR、BLOB和TEXT类型)提供了更有效的存储方式。与传统的COMPACT行格式相比,DYNAMIC格式只存储变长字段的实际使用长度,而不是预分配固定空间,这有助于节省空间并提高性能。

  • COMPRESSED行格式:在DYNAMIC格式的基础上,COMPRESSED行格式进一步通过压缩数据来减少表的物理占用空间。它特别适用于包含大量可变长度数据的表,如大文本文件或图片数据,可以显著减少磁盘使用量和提高IO效率。

使用REDUNDANT或者COMPACT行格式的表,前缀索引的长度被限制在767字节。比如,如果TEXT或VARCHAR列的列前缀索引超过191个字符,则可能会达到此限制,假设为utf8mb4字符集,每个字符最多4个字节。

试图使用超过限制的索引键前缀长度会返回错误。

如果在创建MySQL实例时通过指定InnoDB_page_size选项将InnoDB页面大小减少到8KB或4KB,则索引键的最大长度将按比例降低,这是基于16KB页面大小3072字节的限制。也就是说,当页面大小为8KB时,最大索引密钥长度为1536字节,当页面尺寸为4KB时,最大索引号长度为768字节。

这个限制适用于前缀索引,也适用于完整列索引。

多列索引,最多16列,超过限制会报错

报错如下:

ERROR 1070 (42000): Too many key parts specified; max 16 parts allowed

多列索引(也称为复合索引)是基于表中多个列的值构建的索引。这种类型的索引可以在查询涉及多个列的条件时提高性能,特别是对于查询和排序操作。多列索引按照定义索引时列的顺序来存储数据。

例如,如果一个查询常常需要同时根据姓和名来筛选结果,可以创建一个包含这两个列的复合索引:

CREATE INDEX idx_name ON customers(last_name, first_name);

对于4KB、8KB、16KB和32KB的页面大小,最大行大小(不包括页外存储的任何可变长度列)略小于页面的一半。

例如,16KB的默认innodb_page_size的最大行大小约为8000字节。然而,对于64KB的InnoDB页面大小,最大行大小约为16000字节。LONGBLOB和LONGTEXT列必须小于4GB,并且包括BLOB和TEXT列在内的总行大小必须小于4GB。

如果一行的长度小于半页,则所有行都存储在该页的本地。如果它超过半页,则选择可变长度列用于外部页外存储,直到该行适合半页,

虽然InnoDB内部支持大于65535字节的行大小,但MySQL本身对所有列的组合大小施加了65535的行大小限制。

因为MySQL在早期设计时对行大小做了限制,以简化数据库引擎的管理和提高处理效率。这意味着如果表中包含大量大型字段(如TEXT或BLOB类型),则可能需要优化表的结构,或考虑使用页外存储来避免超过这个限制。

页外存储(也称为外部存储)是InnoDB用于存储那些不能完整地存放在数据库页中的大字段(如BLOB和TEXT类型数据)的机制。当这些列的大小超过半个页面的大小时,InnoDB会将这些数据存储在表空间的特殊部分,只在主记录中保留指向这些外部数据的指针。

下面是如何定义一个使用页外存储的表的示例:

CREATE TABLE articles (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255),
    content LONGTEXT,
    FULLTEXT idx_content (content)
) ENGINE=InnoDB;

在这个例子中,content列可能包含大量文本。如果某些行的content数据非常大,超过了页面大小的一半,InnoDB将自动将这部分数据存储在页外。

最大的表或者表空间尺寸受服务器文件系统的影响

文件系统可能会施加小于InnoDB定义的内部64TiB大小限制的最大文件大小。例如,Linux上的ext4文件系统的最大文件大小为16TiB,因此表或表空间的最大大小变成16TiB而不是64TiB。另一个例子是FAT32文件系统,其最大文件大小为4GB。

如果您需要一个更大的系统表空间,请使用几个较小的数据文件而不是一个大的数据文件来配置它,或者按表和常规表空间数据文件跨文件分发表数据。

InnoDB日志文件的最大组合大小为512GB。

InnoDB的事务日志文件是用于记录所有未提交事务的修改操作的,以确保在系统故障后能够恢复这些事务。InnoDB允许日志文件的最大组合大小达到512GB。较大的日志文件可以在系统故障后提供更长时间的事务数据恢复能力,但同时也可能增加数据恢复的时间。配置合适大小的日志文件是优化数据库性能和恢复能力的重要考虑因素。

最小表空间略微大于10MB,最大表空间取决于InnoDB页大小

InnoDB 最大表空间大小见表格:

InnoDB Page SizeMaximum Tablespace Size
4KB16TB
8KB32TB
16KB64TB
32KB128TB
64KB256TB

最大表尺寸和最大表空间尺寸一致。

一个InnoDB实例支持多达2^32(4294967296)个表空间,其中一小部分表空间被保留用于撤销操作和临时表。

InnoDB支持非常大量的表空间,最多可以达到约43亿个。这为大型数据库系统提供了足够的灵活性和扩展性。在这些表空间中,一部分会被系统自动保留用于特定功能,如撤销操作和临时表的存储。撤销表空间用于存储撤销日志,这对于事务的回滚和数据库的一致性至关重要。

共享表空间支持多达2^32(4294967296)个表。

共享表空间是InnoDB的一种存储结构,可以容纳多达约43亿个表。使用共享表空间可以有效管理磁盘空间和提高数据的物理存储效率。此外,使用共享表空间还可以减少文件系统中文件的数量,这在某些操作系统中可能带来性能提升。

表空间文件的路径,包括文件名,不能超过Windows上的MAX_PATH限制。在Windows 10之前,MAX_PATH限制是260个字符。从Windows 10版本1607开始,MAX_PATH限制从常见的Win32文件和目录函数中移除,但你必须启用新的行为。

在Windows操作系统上,文件路径的最大长度历史上受限于MAX_PATH设置,即260个字符。这意味着整个文件路径,包括文件名,都不能超过这个长度。虽然最新版本的Windows 10允许通过特定设置超越这个限制,但在数据库设计时还需考虑到这一点,特别是在路径可能较长的环境中,以避免相关错误。

参考链接

-InnoDB的使用限制:https://dev.mysql.com/doc/refman/8.0/en/innodb-limits.html

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024连锁收银系统哪个好 有什么特点

在服装连锁店的经营中,选择一款优秀的收银系统至关重要。收银系统不仅仅是简单的结账工具,更是管理销售、库存和客户信息的关键平台。以下将介绍几款优秀的服装连锁店收银系统,以便您更好地了解各款系统的特点和优势。 1. 商淘云连锁店收银系…

150个 HTML5 网站模版 量大慢选

HTML5 网站模版 No.1 HTML5 网站模版 No.1

Python实现外观模式、桥接模式、组合模式和享元模式

今天介绍四种结构型设计模式:外观模式、桥接模式、组合模式和享元模式 外观模式 外观模式(Facade Pattern),它为子系统提供一个统一的接口,使得子系统更加容易使用。 在Python中,我们可以通过定义一个外…

CSS之固定定位、相对定位、绝对定位

一、相对定位 相对元素自身所在的原来的位置进行定位,可以设置 left,right,top,bottom四个属性。 效果:在进行相对定位以后,元素原来所在的位置被保留了,既保留占位,其他元素的位置…

GPT演变:从GPT到ChatGPT

Transformer 论文 Attention Is All You Need The dominant sequence transduction models are based on complex recurrent or convolutional neural networks in an encoder-decoder configuration. The best performing models also connect the encoder… https://arxiv.o…

Linux系统——Elasticsearch企业级日志分析系统

目录 前言 一、ELK概述 1.ELK简介 2.ELK特点 3.为什么要使用ELK 4.完整日志系统基本特征 5.ELK工作原理 6.Elasticsearch介绍 6.1Elasticsearch概述 6.2Elasticsearch核心概念 7.Logstash介绍 7.1Logstash简介 7.2Logstash主要组件 8.Kibana介绍 8.1Kibana简介 …

(我的创作纪念日)[MySQL]数据库原理7——喵喵期末不挂科

希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,大大会看到更多有趣的博客哦!!! 喵喵喵,你对我真的…

代理模式(结构型模式)

目录 1、概述 2、结构 2.1、角色分类 2.2、类图 3、静态代理 3.1、案例类图 3.2、案例代码 4、JDK 动态代理 4.1、案例代码 4.2、底层原理 4.3、执行流程说明 5、CGLib 动态代理 5.1、案例代码 6、三种代理的对比 6.1、JDK代理和CGLib代理 6.2、动态代理和静态…

大模型(Large Models):探索人工智能领域的新边界

🌟文章目录 🌟大模型的定义与特点🌟模型架构🌟大模型的训练策略🌟大模型的优化方法🌟大模型的应用案例 随着人工智能技术的飞速发展,大模型(Large Models)成为了引领深度…

使用ROCm的HIP API向量加法程序

一、向量加法程序 Radeon Open Compute (ROCm) 是一个开源平台,用于加速高性能计算 (HPC) 和机器学习应用程序。它支持包括GPUs在内的多种硬件,并提供HIP (Heterogeneous-compute Interface for Portability) 作为CUDA代码的便捷转换工具。为了提供一个…

广佛站点导航助手小程序产品使用说明书

一、产品简介 广佛站点导航助手小程序是一款专为广佛地区用户设计的地铁导航工具。通过获取用户的实时位置信息,小程序能够迅速定位并展示离用户最近的三个地铁站点。用户可以通过本小程序轻松查找地铁站点,规划出行路线,提高出行效率。 二、…

SDK-0.7.8-Release-实体管理 - ApiHug-Release

🤗 ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace 更多精彩…

Linux:环境基础开发工具使用

文章目录 前言1.Linux下的软件安装1.1 什么是软件包1.2 如何安装软件1.3 如何卸载软件 2.vim2.1 vim的基本概念2.2 vim的基本操作2.3 vim正常模式命令集2.4 vim末行模式命令集2.5 vim的操作总结 3.Linux下的编译器:gcc3.1 gcc的使用3.2 gcc是如何工作的3.2.1 预处理…

Micromamba 安装与使用

文章目录 一、安装 MicromambaWindows安装使用 Micromamba 一、安装 Micromamba Micromamba 是一个静态链接的 C 可执行文件,在 Windows 上就是一个 micromamba.exe 文件,下载下来就直接可以用,甚至都不需要专门安装。唯一需要做的就是设置 …

Python编程的十大好用工具!

Python一直以来都是程序员们的首选编程语言之一,其灵活性和功能强大的库使其成为解决各种问题的理想选择。在本文中,我们将介绍Python编程的终极十大工具,这些工具可以帮助您在各种领域取得成功,无论您是初学者还是经验丰富的开发…

python数据分析学什么东西

前言 大家好,小编为大家解答python数据分析重点要学什么的问题。很多人还不知道python数据分析需要什么基础,现在让我们一起来看看吧! 数据分析人人都有必要掌握一点,哪怕只是思维也行。下面探讨Python数据分析需要学习的知识范…

JavaScript-2.对话框、函数、数组、Date、DOM

对话框 window对象封装了三个对话框用于与用户交互 提示框:alert(title);确认框:confirm(title);输入框:prompt(title); 确认框 包含两个按钮“确认”/“取消”,点击确定时,返回值为true // 确认框 var bool con…

微服务项目——谷粒商城

文章目录 一、项目简介(一)完整的微服务架构详细解释——微服务划分图(二)电商模式1.B2B 模式2.B2C 模式3.C2B 模式4.C2C 模式5.o2o 模式2.谷粒商城 (三)项目技术&特色(四)项目前…

Transformer 结构浅析

Transformer 结构浅析 文章目录 Transformer 结构浅析Transformer 网络结构编码器位置编码多头注意力层Add&NormFeed Forward 解码器带掩码的多头注意力层多头注意力层 预测 Transformer 网络结构 Transformer模型的网络结构如图,且transformer结构主要分为两部…

Linux使用docker安装RocketMQ并登录管理界面

Linux使用docker安装RocketMQ并登录管理界面 1、创建 /opt/rocketmq/docker-compose.yml和/opt/rocketmq/broker.conf两个配置文件 2、docker-compose.yml,并配置管理页面端口为8090 version: 3.5 services:rmqnamesrv:image: foxiswho/rocketmq:servercontainer_…