当前位置: 首页 > news >正文

Mysql 中数据主键类型不一样导致数据插入速度快慢问题

在 MySQL 数据库中,主键是自增的BIGINT类型主键是UUID字符串类型的情况下,插入数据的速度通常是不一样的,并且BIGINT类型通常比UUID更快。原因如下:

索引结构的影响,MySQL 的 InnoDB 存储引擎使用B+ 树索引作为主键索引。

  • 自增BIGINT(顺序插入),自增主键是单调递增的,新插入的记录会顺序追加到 B+ 树的叶子节点末尾,索引结构相对稳定。由于数据总是往后追加,几乎不会导致页分裂(page split),插入性能更高。
  • UUID 是随机分布的,新插入的记录可能落在索引树的不同位置,导致频繁的页分裂页面重组。频繁的索引调整会导致更多的磁盘 I/O 操作,从而降低插入速度。

数据存储的影响

  • BIGINT占用8 字节,存储紧凑,索引占用的空间较小,数据查询效率更高。
  • UUID(通常是VARCHAR(36)BINARY(16),如果是VARCHAR(36),占用36 字节,会使索引更大,影响查询和插入效率。如果使用BINARY(16)存储,会稍微优化存储效率,但仍然比BIGINT大。

BIGINT更小,索引页能容纳更多的索引项,减少磁盘 I/O,提高查询和插入速度。UUID更大,占用更多的索引页,导致数据库缓存命中率下降,从而影响整体性能。

并发场景

  • 在高并发场景下,使用自增BIGINT可能会带来主键争用(INSERT 争用),但 MySQL 5.7+ 的innodb_autoinc_lock_mode=2可以缓解这个问题。
  • UUID没有自增 ID 的锁争用问题,但由于随机性高,插入速度仍然较慢。

innodb_autoinc_lock_mode=2是 MySQL InnoDB 存储引擎中的一个自增锁模式,它可以优化并发插入时的性能。innodb_autoinc_lock_mode控制InnoDB 在插入数据时如何处理自增(AUTO_INCREMENT)锁,主要影响并发插入的性能和一致性。它有 0、1、2 三种模式。

取值模式名称作用
0传统模式(“traditional”)使用表级 AUTO-INC 锁,严格保证自增 ID 连续,但并发性能较差。
1交错模式(“consecutive”)(默认模式)使用轻量级的 AUTO-INC 锁,支持批量插入并提高并发性能。
2轻量级模式(“interleaved”)不使用 AUTO-INC 锁,使用事务内部的自增分配机制,极大提高并发性能,但 ID 可能不连续。
http://www.jsqmd.com/news/477196/

相关文章:

  • 5个必学的AST Explorer使用技巧:快速掌握代码分析神器
  • 如何从源码构建Sigil:跨平台EPUB编辑器的完整指南
  • 【01最短路 BFS】1368. 使网格图至少有一条有效路径的最小代价
  • RLHF在多模态领域的应用:MM-RLHF框架与视觉语言模型对齐技术
  • Taming Transformers完整贡献指南:10个技巧助你成为AI图像合成专家
  • Dolt:将Git与数据库完美结合的开源项目
  • Redis 的用途
  • 如何快速掌握Embark框架:从代码规范到贡献流程的完整指南
  • Vue3商城移动端调试终极指南:Chrome DevTools与Vue DevTools实战技巧
  • Dolt:数据版的Git,让数据库管理更智能
  • Prisma与监控系统:10个性能指标收集和应用监控实现终极指南
  • Gorilla合作伙伴计划:API提供商如何接入生态系统
  • OCRmyPDF与文档扫描标准:符合ISO 19005(PDF/A)的处理
  • 用UE5 Multi-User Editing实现远程团队协作:公网部署+会话管理全流程解析
  • 如何快速掌握AppManager:10个实用技巧提升Android管理效率
  • LeetCode 热题 100 之 215. 数组中的第K个最大元素 347. 前 K 个高频元素 295. 数据流的中位数
  • SecretVault强网杯2025 Web题解:从JWT绕过到HTTP头注入的实战剖析
  • sc-im配置与自定义:打造属于你的终端表格工作流
  • Buildroot+Qt开发:嵌入式GUI应用的快速部署方案
  • 从安装到渲染:MakeHuman完整工作流教程(含Blender导出技巧)
  • OpenVPN 2.5.9 快速部署与多端口转发实战指南
  • PyCaret特征工程:轻松构建专业级特征缩放与选择Pipeline
  • Spring开发系列教程(1)——简介
  • 【从零入门23种设计模式20】行为型之状态模式
  • 瑞芯微RK3568控制板PCB设计实战:从PMU布局到叠层优化的效率提升
  • AI应用落地新范式:从FDE到AgentOps的工程化演进
  • Hugging Face Transformers 介绍
  • vim 提升
  • MATLAB图像去阴影实战:如何用高斯模糊拯救你的背光照片(附完整代码)
  • Spring开发系列教程(2)——IoC容器