首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多列索引搜索Microsoft.Isam.Esent

多列索引搜索Microsoft.Isam.Esent
EN

Stack Overflow用户
提问于 2016-11-10 08:27:27
回答 1查看 237关注 0票数 3

我面临以下问题:我在数据库index1 {binaryColumn1,binaryColumn2}上有一个复合索引。我使用以下方法将索引设置为使用:

代码语言:javascript
复制
Api.JetSetCurrentIndex(_session, _table, index1);

要创建密钥,请执行以下操作:

代码语言:javascript
复制
Api.MakeKey(_session, _table, binaryValue, MakeKeyGrbit.NewKey);

而不是尝试使用以下方法执行搜索:

代码语言:javascript
复制
Api.TrySeek(_session, _table, SeekGrbit.SeekEQ);

如果index1仅适用于1列,则此操作有效并正确地寻求返回true。如果我有多个列,并尝试搜索单个列的值(例如。对于binaryColumn1 = {0x01,0x23}),它总是返回false。

如何搜索这个值?(ps. )我不能更改索引,也不能创建新索引。)这个是可能的吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-11 00:29:51

你所做的只会对{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文件有很多好的示例。

对不起,伪代码,我现在手头没有源代码。

-martin

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40522977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档