为什么MongoDB和MySQL比grep慢?

时间:2015-04-06 10:46:59

标签: mysql mongodb optimization grep database

我正在对维基百科的页面数据进行一些测试。这包括大约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

1 个答案:

答案 0 :(得分:0)

正如@Cyrus建议的那样,你需要一个索引。

ALTER TABLE pagecount ADD KEY (article);

然后再次尝试查询。

在进行基准测试时,您应该使用SELECT SQL_NO_CACHE ...来避免看到的查询时间比服务器始终如一地快得多。