MySQL 优化

3
在我的500万条记录的数据库中... 表格结构:
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

1个回答

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子句中设置的列应该与相应索引定义中完全相同,才能使用对应的索引。

请注意,即使没有索引,此子句也可以工作,但在这种情况下,速度会变得更慢。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接