MySQL在AWS RDS大型实例上进行全文搜索速度极慢

时间:2013-05-22 07:38:15

标签: mysql amazon-web-services full-text-search amazon-rds

我有一个包含1400万行的表,我正在尝试在此表上执行全文搜索。对此的查询执行速度非常慢,对于简单的二进制AND查询大约需要9秒。在我的私有集群上立即执行相同的操作。该表的大小约为3.1 GB,包含1400万行。有人可以解释RDS实例的这种行为吗?

SELECT count(*) 
FROM table_name WHERE id=97
AND match(body) against ('+data +big' IN BOOLEAN MODE) 

6 个答案:

答案 0 :(得分:3)

高IO率通常表示内存不足或缓冲区太小。一个3GB的表,包括索引,应该完全适合(少于)500美元每月专用服务器的内存。

MySQL有许多不同的缓冲区,并且many parameters可以摆弄。以下缓冲区是最重要的,在两种环境中比较它们的大小:

如果InnoDB:innodb_buffer_pool_size

如果MyISAM:key_buffer_sizeread_buffer_size

答案 1 :(得分:0)

如果没有在FULLTEXT index列添加body,那么请尝试一下,这肯定会产生很大的影响

ALTER TABLE `table_name` ADD FULLTEXT INDEX `bodytext` (`body`); 

希望有所帮助

答案 2 :(得分:0)

试试这个

SELECT count(1) 
FROM table_name WHERE id=97
AND match(body) against ('+data +big' IN BOOLEAN MODE) 

这应该加快一点,因为你不必只计算行的所有列。

你可以发布解释本身吗?

答案 3 :(得分:0)

由于数据库版本,表,索引和执行计划相同,因此您需要比较计算机/群集配置。主要比较CPU可用功率,单个事务中使用的内核,存储读取速度,内存大小和读取速度/频率。我可以看到亚马逊提供了各种配置,因此私有集群可能比Amazon RDS实例配置更强大。

要添加到上面,您可以调整CPU,IO和内存之间的负载以提高吞吐量。

答案 4 :(得分:0)

对()使用match()可以在整个3GB全文索引中进行研究,在这种情况下无法强制使用其他索引。

要加快查询速度,您需要让全文索引更轻松,以便:

1 - 清除全文索引中的所有无用字符和停用词

2 - 创建多个全文索引并查看相应的

3 - 将全文搜索更改为LIKE子句并强制使用其他索引,例如'id'。

答案 5 :(得分:0)

尝试在文本索引中放置id并说:

match(BODY,ID) against (+big +data +97) and id=97

您也可以轻松查看可与MySQL一起使用的sphinx。