0

我可以理解这个博客,但它似乎无法适用于使用 Berkeley DB 的非 SQL、Key/Value API 来实现的情况"SELECT * FROM table WHERE name LIKE '%abc%'"

Table structure
-------------------------------------------
key   data(name)
-------------------------------------------
0     abc
1     abcd
2     you
3     spring
.     sabcd
.     timeab
.

我想迭代所有记录不是一种有效的方法,但它确实起到了作用。

4

1 回答 1

0

你是对的。没有任何其他表,您必须扫描所有条目并测试每个数据项。在很多情况下,就这么简单。

如果您使用 SQL LIKE,我怀疑您能否做得更好,除非您的数据项具有明确定义的结构。

但是,如果您的“WHERE name LIKE %abc%”查询确实是 WHERE name="abc",那么除了主表之外,您可能会选择在 db_put 调用上降低性能以创建反向索引:

------------------------------------------
键(名称)数据(索引)
------------------------------------------
美国广播公司 0
abcd 1
sabcd 4
春天 3
时间5
你 2

此表按字母顺序排序,需要词法键比较功能,并支持 BDB 中的重复键。现在,要找到输入的键,您可以简单地执行 db_get ("abc"),或者更好的是,使用 DB_SETRANGE 在“abc”上打开游标。

根据您需要执行的 LIKE 查询类型,您可以使用反向索引技术来缩小搜索空间。

于 2013-11-08T14:43:10.133 回答