mysql - 简单的 MySQL 查询需要 2 到 3 秒?

标签 mysql performance

我有一个相当简单的进程在运行,它会定期拉取 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 毫秒。

感谢大家提供的所有有用提示!

最佳答案

运行:

EXPLAIN SELECT id FROM `articles` WHERE (guid = 'http://example.com/feed.rss')  LIMIT 1;

注意前面的EXPLAIN。这将告诉您 MySQL 在做什么。很难相信从索引中探测一行可能需要 2.7 秒,除非你的机器严重重载和/或颠簸。考虑到行数为 0,我猜 MySQL 进行了全表扫描但什么也没找到,这可能意味着您没有您认为的索引。

要回答您的其他问题,只要您对 articles 表进行任何更改,涉及该表的所有查询缓存条目都会失效。

关于mysql - 简单的 MySQL 查询需要 2 到 3 秒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1298241/

相关文章:

c# - 在 C# 中解构元组的性能损失?

mysql - 如何在 SQL 中按日期范围连接多个价格表?

mysql - Sqoop 从 mysql 导入到 HDFS 抛出 java.io.IOException

mysql - SQL 查询返回唯一的*对*响应

java - Channel中如何高效转换字符编码?

android - 根据时间的昼夜主题

c# - .net 安装程序在安装时添加 mysql 数据库表

mysql - 如何创建模拟我的 mysql 数据库的 Elasticsearch 索引

database - 由于类型转换未使用索引?

javascript - 如何加快 CKEditor 的速度