MySQL优化

Isi*_*sis 3 mysql database indexing search

在我的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 ;
Run Code Online (Sandbox Code Playgroud)

如何优化表格然后搜索"artistname"和"songname"字段?

抱歉英文不好.来自俄罗斯的爱:-D

Qua*_*noi 6

创建FULLTEXT索引:

CREATE FULLTEXT INDEX fx_music_artist_song ON music (artistname, songname)
Run Code Online (Sandbox Code Playgroud)

并发出如下查询:

SELECT  *
FROM    mytable
WHERE   MATCH(artistname, songname) AGAINST ('+queen +bohemian' IN BOOLEAN MODE)
Run Code Online (Sandbox Code Playgroud)

这将匹配在两个artistnamesongname,即使单词不处于领先地位.

要仅匹配艺术家,您只能创建一个附加索引artistname并在查询中使用它:

SELECT  *
FROM    mytable
WHERE   MATCH(artistname) AGAINST ('+queen' IN BOOLEAN MODE)
Run Code Online (Sandbox Code Playgroud)

MATCH子句中设置的列应与要使用的相应索引的索引定义中的列完全相同.

请注意,即使没有索引,此子句也可以工作,但在这种情况下,它会慢得多.