mysql数据库主键类型对性能的影响_使用自增整数优于UUID

自增INT主键比VARCHAR(36)UUID快得多,因自增ID顺序插入减少页分裂、提升缓存命中率,而UUID随机插入导致频繁页分裂、随机I/O和索引碎片;INSERT延迟从0.2--0.5ms升至1.5--4ms,ORDER BY id退化为全表扫描,单页存储量下降约60%。为什么自增 INT 主键比 VARCHAR(36) UUID 快得多因为 B+ 树索引的页分裂和插入局部性完全不同。自增整数按顺序写入,新记录总在索引末尾追加,页分裂少、缓存友好;UUID 是随机字符串,插入位置完全不可预测,导致频繁页分裂、大量随机 I/O 和索引碎片。INSERT 性能差距在真实业务中有多明显在每秒写入 500+ 行的订单表中,用 BIGINT 自增主键时 INSERT 延迟稳定在 0.2--0.5ms;换成 VARCHAR(36) UUID 后,延迟跳到 1.5--4ms,高峰期甚至触发 InnoDB 行锁等待。这不是理论值,是慢日志里能直接捞出来的 Query_time。UUID 每次插入都要搜索整个 B+ 树定位插入点,而自增 ID 只需定位到最后一页InnoDB 的聚簇索引直接按主键排序存储数据行,UUID 导致物理存储乱序,SELECT ... ORDER BY id 变成全表扫描级开销innodb_page_size=16K 下,一个页存约 100 条自增记录,但可能只存 30--40 条 UUID 记录(因字符串长度和填充碎片)想用 UUID 真就完全不行?这几个折中方案得知道如果业务强依赖分布式生成 ID(比如分库分表前就定死了 UUID),至少别用原生 UUID() 函数------它返回的是标准格式带横杠的字符串,多占 4 字节且无法走索引优化。 arXiv Xplorer ArXiv 语义搜索引擎,帮您快速轻松的查找,保存和下载arXiv文章。

相关推荐
Lyn_Li12 小时前
扫描 PDF 歪了怎么办?用 6 种检测方法做本地批量扶正(附开源工具)
python·pdf·ocr·tesseract·开源工具·文档处理·本地处理·扫描件纠偏
白帽小丑12 小时前
# 一次 MySQL DELETE 误操作的数据恢复尝试实录
数据库·mysql
金銀銅鐵12 小时前
费马小定理
python·数学·算法
Quincy_Freak15 小时前
信创内网数据规范实践:银河麒麟下SQLite本地数据安全管理方案
数据库·sqlite·arm·数据库管理·大数据分析·银河麒麟·aarch64
疋瓞16 小时前
python和C++对比(1)_数据类型和数据结构
数据结构·c++·python
2601_9626838917 小时前
治理遗留系统中的“生肉 SQL”:一次用多模型协作优化慢查询的实战复盘
数据库·人工智能·sql
酱学编程17 小时前
【从零到一实现一个 AI Agent 框架 · 第四篇】04. 任务规划:拆解复杂目标 -
服务器·网络·数据库·人工智能
如此这般英俊18 小时前
手搓Claude Code-第六章 subagent
数据结构·人工智能·python·语言模型·自然语言处理
shushangyun_18 小时前
2026智能采购商城系统选型指南:如何引领企业数字化采购升级
java·大数据·数据库·人工智能·机器学习
元Y亨H18 小时前
Python - FastAPI 全方位介绍
python·fastapi