一般来说,什么更快,是通过文件进行 grep 还是通过 blob 运行 SQL LIKE %x% 查询?

2024-02-22

假设我正在设计一个工具,可以将代码片段保存在 PostgreSQL/MySQL 数据库或文件系统中。我想搜索这些片段。使用像Sphinx这样的搜索引擎似乎不太实用,因为我们在搜索代码时需要代码的精确文本匹配。

grep and ack并且一直工作得很好,但是将内容存储在数据库中可以使大量内容在某些方面更易于管理。我想知道跑步的相对表现如何grep在目录树上递归与在具有文本 blob 的同等数量的记录上运行 SQL LIKE 或 MySQL REGEXP 函数之类的查询相比。


如果您有 100 万个文件需要 grep 遍历,您将(据我所知)使用正则表达式遍历每个文件。

出于所有意图和目的,如果您使用 LIKE 运算符或正则表达式对表行进行批量查询,您最终将会对表行执行相同的操作。

然而,我自己使用 grep 的经验是,我很少查找不包含至少一个完整单词的内容,因此您可以利用数据库来减少您正在搜索的集合。

MySQL 具有本机全文搜索功能,但我建议不要使用,因为这意味着您没有使用 InnoDB。

您可以在此处阅读 Postgres 的相关内容:

http://www.postgresql.org/docs/current/static/textsearch.html http://www.postgresql.org/docs/current/static/textsearch.html

在 tsvector 列上创建索引后,您可以分两步执行“grep”,第一步立即查找可能模糊地符合条件的行,然后根据您的真实条件进行另一步:

select * from docs where tsvcol @@ :tsquery and (regexp at will);

这将比 grep 的任何操作都要快得多。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一般来说,什么更快,是通过文件进行 grep 还是通过 blob 运行 SQL LIKE %x% 查询? 的相关文章

随机推荐