mysql - Mysql搜索查询优化

标签 mysql database

我尝试在包含超过 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/

相关文章:

php - 使用来自内部联接的值更新列

PHP/MySQL - 搜索查询

php - Sql 查询返回对象

php - 如何让我在 Heroku 上的 Laravel 项目使用 Heroku Postgres?

mysql - 如何将一个表中的一条记录拆分为另一个表的两条记录

mysql - 通过连接表字段查找精确的重复项

php - 插入数据库时​​将单词更改为数字

database - 帮助数据库设计

sql - 在 SQL Server 中提取具有不一致属性和元素的嵌套 XML 数据

database - Rails 3 - 将大量数据从旧数据库模式移动到新数据库模式