gpt4 book ai didi

mysql - 如何将 LIKE 运算符与二进制有序时间 UUID 结合使用

转载 作者:行者123 更新时间:2023-11-29 16:26:12 25 4
gpt4 key购买 nike

我有一个 MySQL 5.7 表,其中一个二进制 (16) id 列用作主键。引擎是InnoDb。

行是通过 Doctrine 使用 https://github.com/ramsey/uuid-doctrine#innodb-optimised-binary-uuids 创建的根据https://www.percona.com/blog/2014/12/19/store-uuid-optimized-way/

例如,uuid 55a54172-f5e4-11e8-aa0d-fe02fd3f406 在数据库中存储为 HEX(id) = 11E8F5E455A54172AA0DFE02FD3F406

我正在尝试搜索以相同字符串开头的行。

类似这样的伪代码

SELECT *
FROM log
WHERE id LIKE 11E8F5E4

我尝试过查询

SELECT HEX(`id`) AS `id`
FROM `log`
WHERE (`id` & UNHEX('11E8F5E4')) = UNHEX('11E8F5E4')
LIMIT 10

速度很快,但返回具有不同前缀的行,例如11E8E8AD47E47970B1C9525400B61105

使用 Btree 索引(出于性能原因)时如何做到这一点?

最佳答案

我尝试了使用 LIKE 的简单方法,它似乎工作正常。

您需要创建一个末尾有 % 的二进制字符串:

SELECT ...
FROM table
WHERE field LIKE CONCAT(UNHEX('11E8F5E4'),'%')

关于mysql - 如何将 LIKE 运算符与二进制有序时间 UUID 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54217622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com