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
创建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)
这将匹配在两个artistname及songname,即使单词不处于领先地位.
要仅匹配艺术家,您只能创建一个附加索引artistname并在查询中使用它:
SELECT *
FROM mytable
WHERE MATCH(artistname) AGAINST ('+queen' IN BOOLEAN MODE)
Run Code Online (Sandbox Code Playgroud)
MATCH子句中设置的列应与要使用的相应索引的索引定义中的列完全相同.
请注意,即使没有索引,此子句也可以工作,但在这种情况下,它会慢得多.
| 归档时间: |
|
| 查看次数: |
128 次 |
| 最近记录: |