为什么 MongoDB 和 MySQL 比 grep 慢?

Why is MongoDB and MySQL slower than grep?

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

es London 13 173367

第 3 列是计数,我想对具有相同名称(第 2 列)的文章求和。所以,在命令行上:

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

效果很好,需要 0.53s

我认为使用数据库查询信息会更快,所以我将其全部加载到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 ... 以避免发现查询时间看似比服务器持续交付的速度更快。