mysql - 为什么 MongoDB 和 MySQL 比 grep 慢?

标签 mysql mongodb optimization grep database

我正在对维基百科的页数数据进行一些测试。这由大约 700 万行组成,如下所示:

es London 13 173367

第三列是计数,我想对具有相同名称的文章(第二列)进行求和。因此,在命令行上:

paste -sd + <(grep ' London ' pagecounts | cut -d ' ' -f 3) | bc

效果很好,需要 0.53 秒

我认为使用DB来查询信息会更快,所以我将其全部加载到MongoDB数据库中,然后:

db["pagecounts"].aggregate({
    $match: { "article": "London" }
}, {
    $group: { _id: "London", "total": { $sum: "$count" } }
});

这可行,但需要可怕的8.96s

困惑和失望,我转向 MySQL:

SELECT SUM(count) FROM pagecounts WHERE article='London';

耗时5.08s

我对数据库的内部了解不多,但我不会想到像 grep 这样的命令行工具在这种事情上会更快。这是怎么回事?还有什么可以改进的地方?

更新

正如 Cyrus 和 Michael 所建议的,创建和索引使这种方式变得更快:~0.002s

最佳答案

正如 @Cyrus 所建议的,您需要一个索引。

ALTER TABLE pagecount ADD KEY (article);

然后再次尝试查询。

在进行基准测试时,您应该使用 SELECT SQL_NO_CACHE ... 以避免看到查询时间比服务器持续交付的速度更快。

关于mysql - 为什么 MongoDB 和 MySQL 比 grep 慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29469745/

相关文章:

php - 图片没有显示并且无法在 laravel 中更新我的图片

php - 获取错误解析错误 : syntax error, 意外 '$_GET' (T_VARIABLE)

c++ - 对于具有静态存储持续时间的对象,在编译时可以应用哪些类型的构造函数作为优化?

mysql - 每个连接的计数 - 优化

php - 使用 Codeigniter 批准消息

mysql - Mirth Connect 的 channel 中的连接仍然处于空闲状态

node.js - 从 Nodejs : [Symbol(mongoErrorContextSymbol)] 与本地 mongodb 连接时出现问题

node.js - 如何使用nodejs从数据模型中的嵌套对象填充mongodb中的数据集合?

angularjs - 在查询参数中使用 mongoDB ObjectID,它会影响 SEO 吗?

mysql - 使用多个 SELECT 优化 SQL 查询