0

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

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

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); 

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

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`); 

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

P.S. Номера мощности выглядят по-разному для column_a при индексировании объединены и разделены.

ответ

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.

+0

Итак, если я конвертирую из MyISAM в InnoDB, имея 4 индекса, определяющих вместо одного в MyISAM, не займет больше места на диске? Также этот тип определяющих индексов в InnoDB достаточно для чего-то вроде этого '' SELECT 'column_a',' column_b' FROM 'table_1' WHERE MATCH (' column_a', 'column_c') ПРОТИВ ('+ $ search_quesry *' В РЕЖИМЕ BOOLEAN); 'или мне нужно определить новый индекс? Оперирует ли порядок? – SAVAFA

+0

Индексы FT InnoDB намного меньше (по причинам, которые я не понимаю). –

+1

Предложите вам экспериментировать с 10% ваших данных - посмотрите, насколько велики индексы и сколько разных индексов действительно необходимы и т. Д. Вы попадаете в область, где у меня есть только частичные знания. –

Смежные вопросы