开发者社区> 问答> 正文

如何将uuid作为数字存储??mysql

根据问题的答案,即MySQL中的UUID性能,回答者建议将UUID存储为数字而不是字符串。我不太确定该怎么做。有人可以建议我吗?我的ruby代码如何处理呢?

展开
收起
保持可爱mmm 2020-05-17 13:05:37 592 0
1 条回答
写回答
取消 提交回答
  • 如果我理解正确,那么您在主列中使用的是UUID吗?人们会说,常规(整数)主键会更快,但是还有另一种使用MySQL暗面的方法。实际上,当需要索引时,MySQL使用二进制文件的速度比其他任何东西都要快。

    由于UUID为128位,并以十六进制形式编写,因此可以非常轻松地加速和存储UUID。

    首先,在您的编程语言中删除破折号

    从110E8400-E29B-11D4-A716-446655440000到110E8400E29B11D4A716446655440000。

    现在它是32个字符(就像MD5哈希,它也可以使用)。

    由于BINARYMySQL中的单个字节为8位,因此BINARY(16)是UUID的大小(8 * 16 = 128)。

    您可以使用以下命令插入:

    INSERT INTO Table (FieldBin) VALUES (UNHEX("110E8400E29B11D4A716446655440000"))

    并使用以下查询:

    SELECT HEX(FieldBin) AS FieldBin FROM Table

    现在以您的编程语言,在9、14、19和24位置重新插入破折号以匹配您的原始UUID。如果位置总是不同,则可以将该信息存储在第二个字段中。

    完整示例:

    CREATE TABLE test_table ( field_binary BINARY( 16 ) NULL , PRIMARY KEY ( field_binary ) ) ENGINE = INNODB ;

    INSERT INTO test_table ( field_binary ) VALUES ( UNHEX( '110E8400E29B11D4A716446655440000' ) );

    SELECT HEX(field_binary) AS field_binary FROM test_table 如果要对任何十六进制字符串使用此技术,请始终length / 2对字段长度进行操作。因此,对于sha512,该字段将是BINARY (64)因为sha512编码的长度为128个字符。来源:stack overflow

    2020-05-17 13:11:26
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像