在实际开发中mysql的主键不能重复,可能会采用主键自增,为了防止主键重复也可能会采取雪花算法之类的算法保证,这两种主键保存的都是number类型 但是实际开发中可能会生成uuid作为主键那么疑问来了,到底哪种主键的效率高呢?

下面由测试来验证:

1.首先我们先创建一个表,用存储过程生成100w条数据然后分析:

创建表:

CREATE TABLE `my_tables` (`id` VARCHAR(32) NOT NULL ,`name` varchar(32) DEFAULT NULL,`age` int(32) DEFAULT NULL,`time` varchar(32) DEFAULT NULL,`pwd` varchar(32) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
DROP PROCEDURE IF EXISTS my_insert;CREATE PROCEDURE my_insert()BEGINDECLARE n int DEFAULT 1;loopname:LOOPINSERT INTO `my_tables`(`name`,`age`,`time`,`pwd`) VALUES ('张三', 18, '0:0:0:0:0:0:0:1', '369');SET n=n+1;IF n=1000000 THENLEAVE loopname;END IF;END LOOP loopname;END;
CALL my_insert();

下图是采用explain分析得出

2.接下来继续创建另一张表并生成数据

CREATE TABLE `my_tables2` (`id` VARCHAR(32) NOT NULL ,`name` varchar(32) DEFAULT NULL,`age` int(32) DEFAULT NULL,`time` varchar(32) DEFAULT NULL,`pwd` varchar(32) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

创建存储过程并生成数据:

DROP PROCEDURE IF EXISTS proc_insert;DELIMITER $CREATE PROCEDURE pro_insert2()BEGINDECLARE i INT DEFAULT 1;WHILE i<=1000000 DOINSERT INTO `my_tables2`(id,`name`,`age`,`time`,`pwd`) VALUES (i,'张三', 18, '0:0:0:0:0:0:0:1', '369');SET i = i+1;END WHILE;END $;CALL pro_insert2();

如果有小伙伴对explain不太明白的可以去看看博客https://blog.csdn.net/why15732625998/article/details/80388236

前后分析得出 使用uuid或者数字作为主键它的查询效率相差的并没有想象中的大,几乎可以忽略不记 只有key_len有些差别。

key_len:表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度,在不损失精确性的情况下,长度越短越好。key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的。

更多相关文章

  1. Android(安卓)EditView
  2. Android(安卓)Studio App LinearLayout多层布局嵌套
  3. tab上显示数字
  4. Android(安卓)实现滚动数字的TextView
  5. Android(安卓)Studio查看应用数字签名-android学习之旅(76)
  6. Android之BaseAdapter适配器使用技巧
  7. Android(安卓)数字标记
  8. Android(安卓)EditText inputType属性
  9. EditText中android:inputType="number"遇到的坑

随机推荐

  1. 【Android 界面效果12】EditText中的多行
  2. Android中做一个无标题窗口
  3. 使用eclipse打开android_sdk自带的例子
  4. Android UI学习 - ListView (android.R.l
  5. android之照相、相冊裁剪功能的实现过程
  6. Android(安卓)8.1 FreeForm切换显示异常
  7. android中调试之日志
  8. Android PackageManagerService的启动过
  9. android sdk setup时出现:Failed to fetc
  10. Android不依赖Activity的全局悬浮窗实现