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 呼び出しでパフォーマンスを低下させることを選択できます。

-------------------------------------------
キー(名前) データ(インデックス)
-------------------------------------------
abc 0
abcd 1
sabcd 4
春 3
タイムアブ 5
あなた 2

アルファベット順にソートされたこのテーブルは、字句キー比較関数を必要とし、BDB の重複キーのサポートを使用します。ここで、エントリのキーを見つけるには、単に db_get ("abc") を実行するか、"abc" で DB_SETRANGE を使用してカーソルを開きます。

実行する必要がある LIKE クエリの種類によっては、逆インデックス手法を使用して検索スペースを狭めることができる場合があります。

于 2013-11-08T14:43:10.133 に答える