在我有五百万条记录的数据库里..表的结构:
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
发布于 2010-02-12 02:23:45
创建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)
这将在artistname
和songname
中匹配,即使单词不是前导。
要仅匹配艺术家,可以仅在artistname
上创建额外的索引,并在查询中使用它:
SELECT *
FROM mytable
WHERE MATCH(artistname) AGAINST ('+queen' IN BOOLEAN MODE)
MATCH
子句中设置的列应该与要使用的相应索引的索引定义中的列完全相同。
请注意,即使没有索引,这个子句也可以工作,但在这种情况下,它会慢得多。
https://stackoverflow.com/questions/2246617
复制相似问题