关于MySQL数据库InnoDB存储引擎索引长度限制的tips

本文详细阐述了MySQL InnoDB存储引擎中单列和联合索引长度的限制,包括3072bytes的联合索引上限,以及通过启用innodb_large_prefix参数来突破单列索引限制的方法。

有同学问到MySQL数据库InnoDB存储引擎的索引长度问题,简单说几个tips。

关于3072

大家经常碰到InnoDB单列索引长度不能超过767bytes,实际上联合索引还有一个限制是3072。

可以看到,由于每个字段占用255*3, 因此这个索引的大小是3825>3072,报错。

为什么3072

我们知道InnoDB一个page的默认大小是16k。由于是Btree组织,要求叶子节点上一个page至少要包含两条记录(否则就退化链表了)。

所以一个记录最多不能超过8k。
又由于InnoDB的聚簇索引结构,一个二级索引要包含主键索引,因此每个单个索引不能超过4k (极端情况,pk和某个二级索引都达到这个限制)。
由于需要预留和辅助空间,扣掉后不能超过3500,取个“整数”就是(1024*3)。

         单列索引限制

上面有提到单列索引限制767,起因是256×3-1。这个3是字符最大占用空间(utf8)。但是在5.5以后,开始支持4个字节的uutf8。255×4>767, 于是增加了一个参数叫做 innodb_large_prefix。

这个参数默认值是OFF。当改为ON时,允许列索引最大达到3072。

因此有如下效果(5.5):

可以看到默认行为是建表成功,报一个warning,并且将长度阶段为255。

注意要生效需要加row_format=compressed或者dynamic  。

原创文章,转载请注明: 文章地址关于MySQL数据库InnoDB存储引擎索引长度限制的tips

### MySQL 全文索引的使用效果、优缺点及适用场景 全文索引(Full-Text Index)是 MySQL 中一种专门用于文本搜索的索引类型,主要适用于需要对大量文本数据进行高效检索的场景。以下是关于全文索引的详细分析: #### 使用效果 全文索引能够显著提高在大文本字段上的查询效率[^2]。通过创建全文索引MySQL 可以快速定位包含特定关词的记录,而无需扫描整个表的数据。此,全文索引支持复杂的查询条件,例如模糊匹配、布尔模式匹配自然语言模式匹配等。 #### 优缺点 **优点:** 1. **高效的文本搜索**:相比普通索引,全文索引在处理大量文本数据时性能更优[^2]。 2. **支持复杂查询**:可以实现模糊匹配、近义词搜索等功能,满足多样化的查询需求[^2]。 3. **减少全表扫描**:通过索引结构避免了对整张表的逐一扫描,从而提升了查询速度[^4]。 **缺点:** 1. **存储开销较大**:全文索引会占用更多的磁盘空间,尤其是在数据量较大的情况下[^2]。 2. **维护成本高**:随着数据的频繁更新或插入,全文索引的维护可能会带来额的性能负担[^3]。 3. **不适用于小数据集**:对于小型数据集,全文索引可能不会带来明显的性能提升,反而增加了复杂性。 #### 适用场景 1. **搜索引擎应用**:当需要为用户提供类似搜索引擎的功能时,全文索引是非常理想的选择。 2. **文档管理系统**:在管理大量文档或文章的系统中,全文索引可以帮助快速定位相关内容。 3. **社交媒体平台**:在涉及用户生成内容(如评论、帖子)的场景下,全文索引可以优化关词搜索功能[^2]。 以下是一个简单的示例代码,展示如何在 MySQL 中创建使用全文索引: ```sql -- 创建带有全文索引的表 CREATE TABLE articles ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, title VARCHAR(200), body TEXT, FULLTEXT (title, body) ) ENGINE=InnoDB; -- 插入测试数据 INSERT INTO articles (title, body) VALUES ('MySQL Full-Text Index', 'Learn about the advantages of using full-text indexes in MySQL.'), ('Database Optimization', 'Tips for optimizing database performance.'); -- 使用全文索引进行搜索 SELECT * FROM articles WHERE MATCH(title, body) AGAINST('MySQL'); ``` #### 注意事项 为了确保全文索引的最佳效果,建议结合 `EXPLAIN` 关字分析查询执行计划,并根据实际需求调整索引策略[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值