2011-12-01 73 views
0

我在MySQL中擁有超過5000萬行的表。貝婁是表結構: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 

全文被現場祿啓用。我需要獲取所有包含名稱的行詳細信息單詞。下面的查詢沒有返回預期的結果:

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

,所以我不得不使用下面的查詢:

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

有沒有更好的選擇?

回答

0

我不知道您使用的是哪個版本的mySql。但是,下面的查詢,你給我的服務器非常好。

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

如果您獲取與此查詢的問題到現在則只是name前添加一個加號(+)號試試。就像:

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

欲知更多信息,請訪問以下鏈接:

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