2016-07-28 16 views
1

У меня есть небольшая проблема с данными, которые мне нужно решить. У меня есть таблица, где обычный текст электронной почты хранится в столбце longtext. Это было так, прежде чем я начал развиваться в рамках. Есть более миллиона строк, в которых хранятся большие электронные письма.MySQL: разделите столбец длинного текста на несколько столбцов текста

Мне нужно иметь возможность искать текст в этом поле, но требуется, чтобы все результаты возвращались. Это не идеально, потому что сотни пользователей используют систему, и им нужна возможность поиска содержимого электронной почты.

Я попробовал следующее простое утверждение SQL, но это занимает слишком много времени, чтобы найти записи:
select id from emails where description like "%hello world%";

согласовывая документации MySQL, полнотекстовая индексация может быть использована только в CHAR, VARCHAR и текстовые поля.

Может ли кто-нибудь предложить эффективный способ поиска в столбце longtext?

или

Существуют ли какие-либо методы SQL/команды, которые могут быть использованы для запуска через таблицы и разделив содержимое данного поля LONGTEXT в в нескольких текстовых столбцов для полнотекстового индексирования?

ответ

1

Я попробовал следующее простое утверждение SQL, но это занимает слишком много времени, чтобы найти записи: выберите идентификатор из писем, где описание, как «% привет мира%»;

К сожалению, mysql не может использовать индексы для %something% запросов даже в полях varchar. На самом деле он не может использовать индексы для запросов «% something». Индексы могут использоваться только тогда, когда дикая карта происходит в конце строки.

Согласно документации MySQL, полнотекстовое индексирование может быть только , используемое в символьных, текстовых и текстовых полях.

Желаю, чтобы документация была более понятной здесь, это говорит о семействе TEXT полей. Это означает, что вы можете создать индекс для типов полей LONGTEXT и MEDIUMTEXT. Попробуйте следующее:

CREATE TABLE ltxt(bada LONGTEXT); 
ALTER TABLE ltxt ADD FULLTEXT INDEX ftxt2(bada); 

Да, вы будете приятно удивлены!

+0

Я уже пробовал добавлять полнотекстовое индексирование на стол, но он терпит неудачу. Вот результат другой попытки создать новую таблицу. 'create table sample (description longtext);' - 'Query OK, 0 строк (0.20 секунд)'. 'alter table sample add fulltext index descidx (description);' - 'ERROR 1214 (HY000): используемый тип таблицы не поддерживает индексы FULLTEXT'. Двигатель, который используется: InnoDB. –

+0

Я думаю, что нашел свою проблему. В настоящее время я использую mysql 5.5, а не 5.6. Полнотекстовое индексирование добавляется только в InnoDB из mysql 5.6 и далее. –

+0

Да, это, к счастью, обновление - это безболезненный процесс. – e4c5