INDEX или FULLTEXT для хранения VARCHAR(1000) в MySql
Моя цель:
Мне нужно сделать SELECT WHERE string IN ('...')
запросы и string
это VARCHAR (1000)
Вопрос:
Я не знаю, должен ли я использовать индекс FULLTEXT для него или просто простой индекс
Эта проблема:
Поиск будет сделан, делая несколькоUNION
в запросе с двумя похожими таблицами, которые содержат какstring
поле, так что я также не знаю, сделает ли FULLTEXT это быстрее или нет.
(Моя идея индексов FULLTEXT - использовать их с запросами MATCH AGINST)
Структура:
Вы можете увидеть, как я структурировал свой мультипликатор string
поля в разных таблицах в вопросе, который я задал ранее в разделе Как структурировать эту идею базы данных
Замечания:
Вопрос в том, какой тип индекса лучше подходит для данного случая. Я просто связал вопрос структурирования, чтобы дать читателям больше ссылок на то, что я делаю. Это не дублируется.
1 ответ
1-N
Если ваши слова и фразы являются общими и будут дублироваться между многими строками, вам следует рассмотреть возможность разделения их на отношения 1-n. Таким образом, поиск и запрос данных могут быть более эффективными, если объединить их с вашими данными. Это может не соответствовать вашим требованиям - это полностью зависит от типа слов и фраз.
ПОЛНЫЙ ТЕКСТ
Индексирование varchar 1000 - плохая идея (я не люблю делать предположения, но обычно это всегда плохо). Мало того, что это будет использовать ОГРОМНОЕ количество памяти и индексного пространства, если ваш набор данных будет расти, это будет трудная горловина производительности, когда она начнет становиться проблемой. Именно по этой причине FULLTEXT существует, если вы используете MySQL 5.6 или выше, теперь вы можете использовать FULLTEXT и для таблиц INNODB - если вы используете более старую версию, она, к сожалению, будет поддерживаться только в MyISAM, а механизм хранения имеет недостатки (некоторые довольно большие, поэтому, пожалуйста, изучите это, прежде чем выбрать его).
Правильный поиск
Лучшее решение - использовать правильную поисковую систему, такую как Lucene, Sphinx или Xapian.