多列索引搜索 Microsoft.Isam.Esent
Multi column index search Microsoft.Isam.Esent
我面临以下问题:我在数据库索引 1 {binaryColumn1, binaryColumn2} 上有一个复合索引。我正在使用以下设置要使用的索引:
Api.JetSetCurrentIndex(_session, _table, index1);
创建密钥:
Api.MakeKey(_session, _table, binaryValue, MakeKeyGrbit.NewKey);
然后尝试使用以下方法执行搜索:
Api.TrySeek(_session, _table, SeekGrbit.SeekEQ);
如果 index1 仅用于 1 列,则此方法有效并正确地寻找 returns true。如果我有多个列并尝试搜索单个列的值(例如 binaryColumn1 = {0x01, 0x23})它总是 returns false。
如何搜索这个值? (ps。我不能更改索引,也不能创建新索引。)这可能吗?
谢谢
您所做的只会对 {0x01, 0x00}
有效。您不能通过一次调用来完成,因为第二列的值将混淆 SeekEQ
grbit。
您可以执行 SeekGE
,但随后您需要检索该列以确保该值确实正确(而不是 {0x22, 0x23}
之类的)。你必须做类似的事情:
SetCurrentIndex()
MakeKey( ..., binaryValue1, MakeKeyGrbit.NewKey | MakeKeyGrbit.FullColumnStartLimit); // Appends the rest of the search buffer with 0x00's.
Seek(GE);
MakeKey(... binaryValue1, MakeKeyGrbit.NewKey | MakeKeyGrbit.FullColumnEndLimit); // Appends the rest of the search buffer with 0xff's.
Api.JetSetIndexRange();
然后,您可以使用 Api.TryMoveNext()
遍历该列等于 binaryValue1
.
的所有行
另请查看项目中包含的测试代码 -- HowDoI.cs
文件中有很多很好的示例。
抱歉伪代码;我手边没有源代码。
-马丁
我面临以下问题:我在数据库索引 1 {binaryColumn1, binaryColumn2} 上有一个复合索引。我正在使用以下设置要使用的索引:
Api.JetSetCurrentIndex(_session, _table, index1);
创建密钥:
Api.MakeKey(_session, _table, binaryValue, MakeKeyGrbit.NewKey);
然后尝试使用以下方法执行搜索:
Api.TrySeek(_session, _table, SeekGrbit.SeekEQ);
如果 index1 仅用于 1 列,则此方法有效并正确地寻找 returns true。如果我有多个列并尝试搜索单个列的值(例如 binaryColumn1 = {0x01, 0x23})它总是 returns false。
如何搜索这个值? (ps。我不能更改索引,也不能创建新索引。)这可能吗?
谢谢
您所做的只会对 {0x01, 0x00}
有效。您不能通过一次调用来完成,因为第二列的值将混淆 SeekEQ
grbit。
您可以执行 SeekGE
,但随后您需要检索该列以确保该值确实正确(而不是 {0x22, 0x23}
之类的)。你必须做类似的事情:
SetCurrentIndex()
MakeKey( ..., binaryValue1, MakeKeyGrbit.NewKey | MakeKeyGrbit.FullColumnStartLimit); // Appends the rest of the search buffer with 0x00's.
Seek(GE);
MakeKey(... binaryValue1, MakeKeyGrbit.NewKey | MakeKeyGrbit.FullColumnEndLimit); // Appends the rest of the search buffer with 0xff's.
Api.JetSetIndexRange();
然后,您可以使用 Api.TryMoveNext()
遍历该列等于 binaryValue1
.
另请查看项目中包含的测试代码 -- HowDoI.cs
文件中有很多很好的示例。
抱歉伪代码;我手边没有源代码。
-马丁