Оптимизация скорости поиска для поиска определенных подстрок в определенных позициях в одном столбце

#mysql

#mysql

Вопрос:

У меня есть таблица, в которой среди первичных ключей есть столбец VARCHAR(16), который всегда содержит 16 символов. В настоящее время я ищу различные подстроки в определенных позициях в этом столбце, используя «LIKE CONCAT(‘_______________’, ?)», » КАК КОНКАТ(‘______________’, ? ‘_’)»и т. Д., Чтобы использовать пример с 1 символом, но это не обязательно всегда один символ. Символ меняется в зависимости от каждого параметра ? и через каждый запрос я выполняю, и часто таких лайков бывает много или они собираются вместе. Хотя автоматическая генерация этого запроса не имеет большого значения, это все равно недостаточно быстро. Я рассматривал возможность разделения столбца на 16 столбцов VARCHAR(1) и выполнения = ? запросы, поскольку они кажутся намного быстрее для простых тестов, но это становится смешным.

Есть ли какой-нибудь способ заставить mysql индексировать определенный строковый столбец по каждому символу в нем? Потому что это в основном то, что мне нужно. Или это лучший способ сделать это, разделив все это на поля с 1 символом?

Ответ №1:

Есть ли какой-нибудь способ заставить mysql индексировать определенный строковый столбец по каждому символу в нем?

Некоторые базы данных поддерживают функциональные индексы, которые позволят вам это сделать. К сожалению, MySQL не является одним из них.

Или лучший способ сделать это, разделив все это на поля с 1 символом?

Я бы пошел с этим. Вы также можете рассмотреть возможность денормализации и сохранения обоих представлений, если вы также хотите иметь возможность выполнять поиск по всему ключу.

Комментарии:

1. Хорошо, хорошо, разделение этого текстового столбца на 16 столбцов символов означает, что я не могу использовать свою предыдущую настройку первичного ключа, поскольку у меня было включено 2 других столбца, а mysql ограничен 16. Я поместил свои последние 2 столбца, которые я использовал ранее, в качестве первичного ключа и создал отдельный индекс для 16 столбцов символов. Однако теперь я думаю, что это плохая идея. Должен ли я просто оставить последние 2 столбца из первичного ввода / индексации в целом? Обратите внимание, что все «3» (сейчас больше похоже на 18) необходимы для того, чтобы у меня была уникальная строка. Мне нужно найти уникальные строки со вставкой или обновлением при дублировании, но в противном случае использовать только 16 символов…