搜索查询优化Mysql

时间:2016-09-29 16:12:08

标签: mysql database

我尝试在包含超过1.2百万条记录的表上优化以下查询。

#1 - 执行时间:0.6605,用于获取物品

SELECT * FROM `videos` WHERE MATCH (name,tags) AGAINST ('mytag' IN BOOLEAN MODE) LIMIT 20 

*#2 - 执行时间:0.5186,用于分页系统*

SELECT COUNT(*) AS `numrows` FROM `videos` WHERE MATCH (name,tags) AGAINST ('mytag' IN BOOLEAN MODE)

我的桌子结构

DROP TABLE IF EXISTS `videos`;
CREATE TABLE `videos` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`name_url` varchar(255) DEFAULT NULL,
`categories` varchar(255) DEFAULT NULL,
`embed` tinytext,
`description` text,
`tags` varchar(255) DEFAULT NULL,
`hd` smallint(6) DEFAULT '0',
`views` int(11) NOT NULL DEFAULT '0',
`likes` int(11) DEFAULT '0',
`dislikes` int(11) DEFAULT '0',
`cover` varchar(255) DEFAULT NULL,
 PRIMARY KEY (`id`,`name`),
 FULLTEXT KEY `categories` (`categories`),
 FULLTEXT KEY `name` (`name`),
 FULLTEXT KEY `tags` (`tags`)
) ENGINE=MyISAM AUTO_INCREMENT=1273355 DEFAULT CHARSET=latin1;

任何针对每个查询都有快速回复的解决方案?

最好的问候

1 个答案:

答案 0 :(得分:0)

索引应该加载到RAM中,但MyISAM有一个有限大小的缓冲区来存储索引。您可能需要使用key_buffer_size配置选项增加MyISAM索引缓冲区的大小。

我不知道您的服务器规格是什么。它必须是一个功能不足的服务器,因为我已经在740万行数据上使用MySQL全文索引进行了测试,并且查询在16毫秒内执行。这是在Macbook Pro上,真正的服务器应该更快。

请参阅我在MySQL中关于全文搜索的演示文稿:http://www.slideshare.net/billkarwin/practical-full-text-search-with-my-sql