我有一个相当简单的进程在运行,定期拉取RSS提要并更新MySQL数据库中的文章。
目前,文章表填充了大约130k行。对于找到的每篇文章,处理器都会检查文章是否已经存在。这些查询几乎总是需要300毫秒左右,每10到20次尝试中,它们需要超过2秒钟的时间。
我在guid列上有一个索引,但每当遇到新文章时,它都会被添加到文章表中 - 这会使查询缓存无效(对吗?)。
慢查询日志中的其他一些字段报告了检查了120多行。
当然,在我的开发机器上,这些查询大约需要0.2毫秒。
该服务器是来自Engine Yard Solo(EC2)的虚拟主机,具有1.7GB内存和EC2现在提供的任何CPU。
非常感谢您的任何建议。
更新
事实证明问题出在使用者端。我在'id'上有一个索引,但却查询'guid'。
在'guid'上添加索引将每个查询时间降至0.2毫秒。
感谢所有人给出的有用提示!
目前,文章表填充了大约130k行。对于找到的每篇文章,处理器都会检查文章是否已经存在。这些查询几乎总是需要300毫秒左右,每10到20次尝试中,它们需要超过2秒钟的时间。
SELECT id FROM `articles` WHERE (guid = 'http://example.com/feed.rss') LIMIT 1;
# Query_time: 2.754567 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 0
我在guid列上有一个索引,但每当遇到新文章时,它都会被添加到文章表中 - 这会使查询缓存无效(对吗?)。
慢查询日志中的其他一些字段报告了检查了120多行。
当然,在我的开发机器上,这些查询大约需要0.2毫秒。
该服务器是来自Engine Yard Solo(EC2)的虚拟主机,具有1.7GB内存和EC2现在提供的任何CPU。
非常感谢您的任何建议。
更新
事实证明问题出在使用者端。我在'id'上有一个索引,但却查询'guid'。
在'guid'上添加索引将每个查询时间降至0.2毫秒。
感谢所有人给出的有用提示!