Как использовать оператор LIKE с двоичным UUID упорядоченного времени - PullRequest
0 голосов
/ 16 января 2019

У меня есть таблица MySQL 5.7 с двоичным столбцом идентификатора (16), который используется в качестве первичного ключа.Движок - 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 (по соображениям производительности)?

1 Ответ

0 голосов
/ 16 января 2019

Я попробовал простой подход с LIKE, и, похоже, он работает нормально.

Вам нужно создать двоичную строку с% в конце:

SELECT ...
FROM table
WHERE field LIKE CONCAT(UNHEX('11E8F5E4'),'%')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...