通常更快,通过文件搜索或通过 Blob 运行 SQL LIKE %x% 查询?
问题:通常更快,通过文件搜索或通过 Blob 运行 SQL LIKE %x% 查询? 假设我正在设计一个将代码片段保存在 PostgreSQL/MySQL 数据库或文件系统中的工具。我想搜索这些片段。使用像 Sphinx 这样的搜索引擎似乎并不实用,因为我们在搜索代码时需要代码的精确文本匹配。 grep和ack一直运行良好,但是将内容存储在数据库中会使大量内容在某些方面更易于管理。我想知道在目录树
问题:通常更快,通过文件搜索或通过 Blob 运行 SQL LIKE %x% 查询?
假设我正在设计一个将代码片段保存在 PostgreSQL/MySQL 数据库或文件系统中的工具。我想搜索这些片段。使用像 Sphinx 这样的搜索引擎似乎并不实用,因为我们在搜索代码时需要代码的精确文本匹配。
grep
和ack
一直运行良好,但是将内容存储在数据库中会使大量内容在某些方面更易于管理。我想知道在目录树上递归运行grep
与在具有 TEXT blob 的等量记录上运行 SQL 的 LIKE 或 MySQL 的 REGEXP 函数等查询的相对性能是什么。
解答
如果您有 1M 文件要通过 grep,您将(最好我知道)使用正则表达式遍历每个文件。
出于所有意图和目的,如果您使用 LIKE 运算符或正则表达式对表行进行大规模查询,您最终将对表行执行相同的操作。
我自己对 grep 的经验是,我很少寻找不包含至少一个完整单词的内容,因此您可以利用数据库来减少您正在搜索的集合。
MySQL 具有原生的全文搜索功能,但我建议不要这样做,因为它们意味着您没有使用 InnoDB。
您可以在此处阅读来自 Postgres 的内容:
http://www.postgresql.org/docs/current/static/textsearch.html
在 tsvector 列上创建索引后,您可以分两步执行“grep”,一个是立即查找可能模糊符合条件的行,然后是另一个根据您的真实条件的行:
select * from docs where tsvcol @@ :tsquery and (regexp at will);
这将比 grep 可以做的任何事情都要快得多。
更多推荐
所有评论(0)