2011-12-01 2 views
0

50 백만 개가 넘는 행이있는 MySQL 테이블이 있습니다. 우는 소리는 테이블 구조입니다 :MySQL 테이블 성능

CREATE TABLE `links` (           
     `id` bigint(20) NOT NULL AUTO_INCREMENT,      
     `loc` text NOT NULL,           
     `lastmod` datetime NOT NULL,         
     `changefreq` varchar(15) NOT NULL,        
     `priority` float NOT NULL,          
     `isdownloaded` tinyint(1) NOT NULL,       
     `mainrepoid` bigint(20) NOT NULL,        
     PRIMARY KEY (`id`),           
     FULLTEXT KEY `locfulltext` (`loc`)        
    ) ENGINE=MyISAM AUTO_INCREMENT=11426345 DEFAULT CHARSET=latin1 

풀 텍스트가 필드 LOC에 사용할 수 있습니다. 이름이 모두이고 인 모든 행을 가져와야합니다. 단어입니다.

SELECT id, loc 
FROM links 
WHERE 
loc like '%name%' and 
loc like '%details%' 

더 좋은 대안은 있는가 : 그래서 나는 다음과 같은 쿼리를 사용하도록 강요하고

SELECT * 
FROM links 
WHERE 
MATCH (
    loc 
) 
AGAINST (
    'name +details' IN BOOLEAN MODE 
) 

: 다음 쿼리는 예상 된 결과를 반환하지 않았습니다?

답변

0

어떤 버전의 mySql을 사용하는지 알 수 없습니다. 그러나 다음 쿼리는 내 서버에서 잘 작동합니다.

SELECT * 
FROM links 
WHERE 
MATCH (
    loc 
) 
AGAINST (
    'name +details' IN BOOLEAN MODE 
) 

은 이제 그럼 그냥 name 전에 더하기 (+) 기호를 추가로 시도 할 때까지이 쿼리에 문제를 가져 오는 경우. 그냥 좋아 :

http://dev.mysql.com/doc/refman/5.0/en/fulltext-boolean.html

: 더 자세한 내용은

SELECT * 
FROM links 
WHERE 
MATCH (
    loc 
) 
AGAINST (
    '+name +details' IN BOOLEAN MODE 
) 

다음 링크를 참조