【发布时间】:2009-08-19 07:10:30
【问题描述】:
我有一个相当简单的进程正在运行,它定期拉取 RSS 提要并更新 MySQL 数据库中的文章。
articles 表现在已填充到大约 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 毫秒。
感谢大家提供的所有有用提示!
【问题讨论】:
-
1.7'Mb' 的内存非常小。我的 286 电脑有 1Mb。
-
是的,请编辑并修复这个数量,因为我看起来和事情“不可能”
-
修复了内存注释 - 它应该是 GB。谢谢!
标签: mysql performance