#mysql #indexing #full-text-search #full-text-indexing #fulltext-index
Вопрос:
у меня такой длинный текст, что превышен лимит индекса в байтах. В тексте нет места. это комбинация таких вещей, как имя базы данных и имя таблицы.
Я буду запрашивать только проверку точно так же select * from table where column='text'
, или если я использую полнотекстовый поиск, это может выглядеть так. select * from table where Match (column) Against(text)
я не знаю, какой из двух вариантов лучше всего выбрать ниже. я буду использовать text_example = '{dbName}/{tableName}'
для объяснения, но на самом деле это комбинация по крайней мере 5 типов строк.
вариант 1. используйте полнотекстовый поиск
вариант 2. используйте индекс Чтобы использовать индекс, я должен разделить text_example на 5 типов. А затем создайте индекс каждого типа.
create table info (
dbName text,
tableName text,
index dbIdx (dbName),
index tableIdx (tableName)
);
запрос на вставку будет часто.
В таком случае, какой из них является лучшим аспектом хранения? как насчет производительности?
или есть ли какой-либо хороший способ улучшить запрос select с таким длинным текстом? К вашему сведению, я использую mysql 8.0
Ответ №1:
- Пунктуация, например
/
, разделяет «слова» с цельюFULLTEXT
. - «имя базы данных/имя таблицы» — это не очень длинный текст, который ограничен, возможно, 129 символами. (Итак, я не понимаю, откуда берется «превышение предела индекса в байтах».)
col = 'text'
проверяет весь столбец;MATCH..AGAINST
проверяет «слова» в столбце. То есть они делают разные вещи.
Пожалуйста, уточните, на что похож реальный текст и на что похож реальный запрос. Тогда мы сможем проконсультировать FULLEXT
вас по BTREE
этому вопросу .
Комментарии:
1. текстовый формат, подобный этому. ‘{Имя компании}://{отдел}/{класс}/{идентификатор пользователя}/{ник}’ единственный случай, который мне нужен
where person='{companyName}://{department}/{grade}/{user_id}/{nickname}'
, в этом случае, какой из них лучше? полный текст против btree2. Если это всегда так, и вы всегда проверяете эти 5 вещей, победит индекс BTree из 5 столбцов против 5 отдельных столбцов.