Полнотекстовое индексирование на MyISAM, один столбец против индексации нескольких столбцов

mysql full-text-search multiple-columns myisam full-text-indexing

317 просмотра

1 ответ

У меня очень большая таблица (4M + строки) с дисковым пространством более 40 ГБ (данные 14 ГБ и индекс 28 ГБ). Мне нужен был полнотекстовый поиск по нескольким полям, как объединенным, так и разделенным, что означало, что мне нужно было сделать возможным полнотекстовый поиск по одному и нескольким столбцам вместе, как показано ниже:

для комбинированного поиска

SELECT `column_a`, `column_b` FROM `table_1` WHERE MATCH (`column_a`, `column_c`, `column_x`) AGAINST ('+$search_quesry*' IN BOOLEAN MODE);

для отдельного поиска

SELECT `column_a`, `column_b` FROM `table_1` WHERE MATCH (`column_a`) AGAINST ('+search_query*' IN BOOLEAN MODE);
SELECT `column_a`, `column_b` FROM `table_1` WHERE MATCH (`column_c`) AGAINST ('+search_query*' IN BOOLEAN MODE);
SELECT `column_a`, `column_b` FROM `table_1` WHERE MATCH (`column_x`) AGAINST ('+search_query*' IN BOOLEAN MODE);

Вот мой вопрос У меня есть оба следующих набора, уже определенные как индексы, которые занимают 24 ГБ + дисковое пространство. Я сделал это правильно или достаточно одного сета?

ALTER TABLE  `table_1` ADD FULLTEXT (`column_a`, `column_c`, `column_x`);

и / или

ALTER TABLE  `table_1` ADD FULLTEXT (`column_a`);
ALTER TABLE  `table_1` ADD FULLTEXT (`column_c`);
ALTER TABLE  `table_1` ADD FULLTEXT (`column_x`);

ИЛИ ЖЕ

ALTER TABLE  `table_1` ADD FULLTEXT (`column_a`);
ALTER TABLE  `table_1` ADD FULLTEXT (`column_c`, `column_x`);

Это главным образом для уменьшения необходимого дискового пространства, а также для повышения производительности. Любое лучшее предложение более чем приветствуется. Спасибо :)

PS Числа кардинальности кажутся разными, column_aкогда они объединяются и разделяются.

Автор: SAVAFA Источник Размещён: 21.10.2019 08:08

Ответы (1)


1 плюс

Для MyISAM:

FULLTEXT (`column_a`, `column_c`, `column_x`)

Для InnoDB:

FULLTEXT (`column_a`, `column_c`, `column_x`),
FULLTEXT (`column_a`),
FULLTEXT (`column_c`),
FULLTEXT (`column_x`)

Если у вас версия 5.6 или выше, вы должны конвертировать в InnoDB.

Автор: Rick James Размещён: 12.02.2016 11:53
Вопросы из категории :
32x32