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

mysql 订单号主键_mysql为什么不建议使用订单号或者其他形式的业务单号作为主键?...

mysql为什么不建议使用订单号或者其他形式的业务单号作为主键?

目前我们电商平台的订单号,或者其他业务单号,为了保证唯一,多数都选择的是雪花算法snowflake或者其他变种来生成的。

生成分布式电商业务唯一id的实现,可以参考:https://tech.meituan.com/2017/04/21/mt-leaf.html 美团点评的这篇博客,这篇博客基本涵盖了目前所有的方式方法。

但是,既然保证了分布式全局唯一,那么我们为什么不建议使用订单号或者其他形式的业务单号来作为我们mysql数据库的主键呢?

其实要从以下几个方面来考虑:

一,大部分分布式全局唯一id生成服务产生的id是没有办法保证连续性的(举个简单的例子,雪花算法的一些实现里,中间位置是机器号,上一秒在机器id为3的机器上生成了一个03+时间戳的id,下一秒在机器id为2的机器上生成了一个02+时间戳的id,那么反而下一秒的这个id要先于上一秒的),如果使用不连续的id来作为主键,主键也是索引,而innodb的索引采用的是b+tree,所以每次在插入的时候,都会因为不是有序的,都要去执行一次重排序,引起没必要的计算和内存开销

二,普通索引上存储的是主键的值,即便是保证了我们生成服务的id是有序的,但是我们生成的id都是那种很长的字符串,这样在普通索引上就会存储大量的数据,导致会占用大量的物理空间。

题外话,如果mysql,使用innodb引擎,在不显示声明主键的情况下,mysql会自动选择一列能够唯一标识数据的字段来作为主键,如果不存在这种列,mysql会生成一个隐含字段来作为主键,这个字段是一个长度为6个字节的长整型。

相关文章:

  • 设置系统同步 mysql_mysql主从同步设置
  • mysql自动增长恢复_mysql自动增长的有关问题,怎么恢复从1开始
  • kettle mysql jdbc_kettle 连接 mysql8
  • .mysql secret在哪_MySQL如何使用索引
  • json to mysql_JsonToMysql(JSON导入MySQL工具) V1.6 官方版
  • MySQL与CVM自建数据库优势_UCloud云数据库MySQL产品优势及与自建数据库对比
  • mysql中的like函数_mysql中regexp_like函数的用法
  • mysql 分表条件_MySQL优化(一):MySQL分库分表
  • mysql专业人数_mySQL算出一个或两个以上的人数?
  • pdo mysql防注入_pdo如何防止 sql注入
  • 脉冲超声波 发射脉宽_超声波液位计和雷达液位计到底有什么不同
  • python通过什么来判断当前程序是否在_python3怎么判断进程是否存在
  • php mysql搭建个人博客_Docker最全教程之使用PHP搭建个人博客站点(二十二)
  • arcgis gp 选择图层_ArcGIS Engine实现图层间空间选择的优化策略
  • mysql 8安装 windows xp_Windows XP下安装和配置Apache2.2.22服务器+PHP5+Mysql5
  • 30秒的PHP代码片段(1)数组 - Array
  • angular2 简述
  • CAP 一致性协议及应用解析
  • centos安装java运行环境jdk+tomcat
  • gcc介绍及安装
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • MySQL的数据类型
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • Object.assign方法不能实现深复制
  • Python 基础起步 (十) 什么叫函数?
  • Redis中的lru算法实现
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 仿天猫超市收藏抛物线动画工具库
  • 回流、重绘及其优化
  • 移动端唤起键盘时取消position:fixed定位
  • 用jquery写贪吃蛇
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​TypeScript都不会用,也敢说会前端?
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • ###C语言程序设计-----C语言学习(3)#
  • #1014 : Trie树
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #pragma multi_compile #pragma shader_feature
  • (C语言)字符分类函数
  • (java)关于Thread的挂起和恢复
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (ZT)出版业改革:该死的死,该生的生
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转)Oracle 9i 数据库设计指引全集(1)
  • .net FrameWork简介,数组,枚举
  • .net 微服务 服务保护 自动重试 Polly
  • .net经典笔试题
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • .net与java建立WebService再互相调用
  • :中兴通讯为何成功
  • @EventListener注解使用说明