首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场

MySQL优化
EN

Stack Overflow用户
提问于 2010-02-12 02:19:39
回答 1查看 133关注 0票数 3

在我有五百万条记录的数据库里..表的结构:

代码语言:javascript
运行
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-02-12 02:23:45

创建FULLTEXT索引:

代码语言:javascript
运行
复制
CREATE FULLTEXT INDEX fx_music_artist_song ON music (artistname, songname)

并发出如下查询:

代码语言:javascript
运行
复制
SELECT  *
FROM    mytable
WHERE   MATCH(artistname, songname) AGAINST ('+queen +bohemian' IN BOOLEAN MODE)

这将在artistnamesongname中匹配,即使单词不是前导。

要仅匹配艺术家,可以仅在artistname上创建额外的索引,并在查询中使用它:

代码语言:javascript
运行
复制
SELECT  *
FROM    mytable
WHERE   MATCH(artistname) AGAINST ('+queen' IN BOOLEAN MODE)

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

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2246617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档