我在orientDB建立在一个类中的以下指标:OrientDB为什么不使用正确的索引?
INDEXES (3 altogether)
-------------------------------+----------------+
NAME | PROPERTIES |
-------------------------------+----------------+
opponentId | accountId (+) |
| opponentId |
noiseId | noiseId |
protocolId | accountId (+) |
| protocolId |
,我试图执行以下查询:
explain select * from method where accountId=1 and protocolId=1 and noiseId=1
我怪异的结果:
1 )orient不是使用''noiseId''索引或'protocolId'索引,而是选择使用''opponentId''索引
2)下面是解释的原始输出:
{
"@type": "d",
"@version": 0,
"fullySortedByIndex": false,
"compositeIndexUsed": 1,
"involvedIndexes": ["opponentId"],
"limit": -1,
"fetchingFromTargetElapsed": 0,
"indexIsUsedInOrderBy": false,
"elapsed": 0.195936,
"resultType": "collection",
"resultSize": 0,
"@fieldTypes": "compositeIndexUsed=l,involvedIndexes=e,fetchingFromTargetElapsed=l,elapsed=f"
}
3)这里的所有字段都是数字(accountId = long,其余为整数)。索引是SBTREE类型,不是唯一的
有什么我在这里做错了吗?有人可以对OrientDB的索引逻辑进行一些阐述吗?
嗨,什么类型/类型的索引您使用的是? – LucaS
字段类型都是数字(accountId很长,其余都是整数) 索引类型都是SBTREE而不是NOTUNIQUE – anonybunny
对不起,我发布了答案,但我还没有看到您的消息。我使用了一个独特的索引,但概念应该是一样的。 – LucaS