полнотекстовый поиск по индексу для проверки точно такого же текста

#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}' , в этом случае, какой из них лучше? полный текст против btree

2. Если это всегда так, и вы всегда проверяете эти 5 вещей, победит индекс BTree из 5 столбцов против 5 отдельных столбцов.