2010-02-11 110 views
3

在我的500万条记录..表的 结构数据库:MySQL的优化

CREATE TABLE IF NOT EXISTS `music` (
    `id` int(50) NOT NULL auto_increment, 
    `artistname` varchar(50) NOT NULL, 
    `songname` varchar(50) NOT NULL, 
    `duration` varchar(6) NOT NULL, 
    `url` varchar(255) NOT NULL, 
    `server` int(5) NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `artistname` (`artistname`), 
    KEY `songname` (`songname`), 
    KEY `url` (`url`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ; 

我如何优化表,然后做在田地里“ARTISTNAME”和“SONGNAME”的搜索?

对不起,英语不好。来自俄罗斯的爱情:-D

回答

6

创建FULLTEXT指数:

CREATE FULLTEXT INDEX fx_music_artist_song ON music (artistname, songname) 

,并发出这样的询问:

SELECT * 
FROM mytable 
WHERE MATCH(artistname, songname) AGAINST ('+queen +bohemian' IN BOOLEAN MODE) 

这将在两个artistnamesongname匹配,即使单词并不领先。

只匹配艺术家,你只能在artistname创建一个额外的指标,并用它在查询:

SELECT * 
FROM mytable 
WHERE MATCH(artistname) AGAINST ('+queen' IN BOOLEAN MODE) 

MATCH子句中设置的列应该是完全一样的索引定义为相应的索引使用。

请注意,即使没有索引,该子句也可以工作,但在这种情况下,它将会更慢。