2016-07-28 2 views
1

해결해야하는 데이터에 약간의 문제가 있습니다. 전자 메일의 일반 텍스트가 longtext 열에 저장되는 테이블이 있습니다. 내가 프레임 워크에서 개발하기 시작하기 전에 이런 느낌이었습니다. 이미 백만 개의 행에 큰 이메일이 저장되어 있습니다.MySQL : 긴 텍스트 열을 여러 텍스트 열로 나눕니다.

해당 필드에서 텍스트를 검색 할 수 있어야하지만 결과가 반환되기까지 시간이 오래 걸립니다. 이것은 수백 명의 사용자가 시스템을 사용하고 전자 메일 컨텐츠를 검색 할 수 있어야하기 때문에 이상적이지 않습니다.

나는 다음과 같은 간단한 SQL 문을 시도했지만이 기록을 찾기 위해 너무 오래 걸립니다 :
select id from emails where description like "%hello world%";

전체, 텍스트 인덱싱은 CHAR, VARCHAR 및 텍스트 필드에 MySQL의 문서를 사용할 수 있습니다 따르면.

누군가 긴 텍스트 열을 검색하는 효율적인 방법을 제안 할 수 있습니까?

또는

테이블 및 전체 텍스트 인덱싱에 대한 여러 텍스트 컬럼에 LONGTEXT 필드의 내용을 분할을 실행하는 데 사용할 수있는 SQL 방법/명령이 있습니까?

답변

1

나는 다음과 같은 간단한 SQL 문을 시도했지만이 기록을 찾기 위해 너무 오래 걸립니다 : 이메일에서 선택 ID를 여기서 설명처럼 "% 안녕 세계 %를";

불행히도 mysql은 varchar 필드에서도 %something% 쿼리에 대해 인덱스를 사용할 수 없습니다. 실제로 그것은 '% something'쿼리에 인덱스를 사용할 수 없습니다. 와일드 카드가 문자열 끝에있을 때만 색인을 사용할 수 있습니다.

MySQL 설명서에 따르면 전체 텍스트 인덱싱은 char, varchar 및 텍스트 필드에만 이 될 수 있습니다.

문서가 더 명확 해 지길 바란다. 이것은 TEXT 계열 필드에 대한 것이다. 즉, LONGTEXT 및 MEDIUMTEXT 유형의 필드에 실제로 색인을 작성할 수 있음을 의미합니다. 사용해보기 :

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

예, 당신은 크게 놀라게 될 것입니다!

+0

이미 테이블에 전체 텍스트 색인 추가를 시도했지만 실패합니다. 새로 생성 된 테이블에 대한 또 다른 시도의 출력 결과는 다음과 같습니다. 'create table sample (description longtext);'- '쿼리 OK, 0 rows affected (0.20 sec)'. 'alter table sample add fullidext index descidx (description);'- 'ERROR 1214 (HY000) : 사용 된 테이블 타입이 FULLTEXT 인덱스를 지원하지 않습니다. 사용되는 엔진은 InnoDB입니다. –

+0

내 문제를 발견했다고 생각합니다. 나는 현재 mysql 5.5를 사용하고 있고 5.6을 사용하고 있지 않다. 전체 텍스트 인덱싱은 mysql 5.6부터 InnoDB에만 추가된다. –

+0

예, 운좋게도 업그레이드가 간편합니다. – e4c5