如何将LIKE运算符与二进制有序时间UUID一起使用

时间:2019-01-16 13:00:57

标签: mysql binary

我有一个MySQL 5.7表,其中有一个binary(16)id列用作PRIMARY键。 引擎是InnoDb。

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

例如,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索引时(出于性能原因)如何做?

1 个答案:

答案 0 :(得分:0)

我用LIKE尝试了简单的方法,它似乎运行良好。

您需要制作一个以%结尾的二进制字符串:

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