我尝试在包含超过 120 万条记录的表上优化以下查询。
#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)
我的 table 的结构
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;
有任何解决方案可以快速响应每个查询吗?
最诚挚的问候
最佳答案
索引应该加载到RAM中,但是MyISAM有一个有限大小的缓冲区来存储索引。您可能需要使用 key_buffer_size
配置选项来增加 MyISAM 索引缓冲区的大小。
我不知道您的服务器规范是什么。它肯定是一个性能相当低下的服务器,因为我已经用 MySQL 全文索引对 740 万行数据进行了测试,并且查询在 16 毫秒内执行。这是在 Macbook Pro 上进行的,真正的服务器应该更快。
请参阅我关于 MySQL 全文搜索的演示:http://www.slideshare.net/billkarwin/practical-full-text-search-with-my-sql
关于mysql - Mysql搜索查询优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39775235/