我有一个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索引时(出于性能原因)如何做?
答案 0 :(得分:0)
我用LIKE
尝试了简单的方法,它似乎运行良好。
您需要制作一个以%结尾的二进制字符串:
SELECT ...
FROM table
WHERE field LIKE CONCAT(UNHEX('11E8F5E4'),'%')