orientdb sql不按预期工作

orientdb sql不按预期工作,sql,orientdb,Sql,Orientdb,我有一个orientdb数据库,带有文档式存储。 我有一个MyDocument类,它有大约300000条记录,以循环方式存储(没有定制的集群策略) 我有一个数字字段,它以yyyyMMdd的方式告诉我存储日期,它的索引不是唯一的 直到我进行以下查询: select from MyDocument where publishDay=20151101 它工作得很好:我每天收到大约100张唱片 如果我使用范围,疼痛开始: select from MyDocument where publishDay

我有一个orientdb数据库,带有文档式存储。 我有一个MyDocument类,它有大约300000条记录,以循环方式存储(没有定制的集群策略)

我有一个数字字段,它以yyyyMMdd的方式告诉我存储日期,它的索引不是唯一的

直到我进行以下查询:

select from MyDocument where publishDay=20151101
它工作得很好:我每天收到大约100张唱片

如果我使用范围,疼痛开始:

 select from MyDocument where publishDay between 20151101 and 20151102
如果我从控制台执行此查询,它将返回0条记录

如果我在webapp上这么做,它会说

"fetched more than 50000 records: to speed up the execution, create an index or change the query to use an existent index"
但是我已经有了一个索引,所以我似乎不能做更多关于特定日期的查询。 还有一个技巧,例如:

select * from inputdocument where publishday = 20150102 or publishday = 20150101
顺便说一句,我使用版本2.0.15


我做错什么了吗?我使用这种用法是否达到了orientdb的极限?

我尝试使用以下小osql脚本在orientdb 2.0.15中重现您的DB:

create class MyDocument extends V;

create property MyDocument.publishDay integer;

create vertex MyDocument set publishDay = 20151101;
create vertex MyDocument set publishDay = 20151101;
create vertex MyDocument set publishDay = 20151101;
create vertex MyDocument set publishDay = 20151101;
create vertex MyDocument set publishDay = 20151101;
create vertex MyDocument set publishDay = 20151101;
create vertex MyDocument set publishDay = 20151102;
create vertex MyDocument set publishDay = 20151102;
create vertex MyDocument set publishDay = 20151102;
create vertex MyDocument set publishDay = 20151102;
create vertex MyDocument set publishDay = 20151102;
create vertex MyDocument set publishDay = 20151102;
create vertex MyDocument set publishDay = 20151103;
create vertex MyDocument set publishDay = 20151103;
create vertex MyDocument set publishDay = 20151103;
create vertex MyDocument set publishDay = 20151103;
create vertex MyDocument set publishDay = 20151103;
create vertex MyDocument set publishDay = 20151103;
create vertex MyDocument set publishDay = 20151104;
create vertex MyDocument set publishDay = 20151104;
create vertex MyDocument set publishDay = 20151104;
create vertex MyDocument set publishDay = 20151104;
create vertex MyDocument set publishDay = 20151104;
create vertex MyDocument set publishDay = 20151104;
create vertex MyDocument set publishDay = 20151105;
create vertex MyDocument set publishDay = 20151105;
create vertex MyDocument set publishDay = 20151105;
create vertex MyDocument set publishDay = 20151105;
create vertex MyDocument set publishDay = 20151105;
create vertex MyDocument set publishDay = 20151105;
create vertex MyDocument set publishDay = 20151106;
create vertex MyDocument set publishDay = 20151106;
create vertex MyDocument set publishDay = 20151106;
create vertex MyDocument set publishDay = 20151106;
create vertex MyDocument set publishDay = 20151106;
create vertex MyDocument set publishDay = 20151106;

create index MyDocument.publishDay NOTUNIQUE;
我将属性“publishDay”声明为整数,并在“publishDay”上创建了一个NOTUNIQUE索引

你的查询也可以

也可以通过索引进行搜索


与您的模式有什么不同吗?

我认为您已经定义了一个HASHINDEX,根据定义,它不能处理范围。尝试使用非唯一索引(SBTree算法)

索引已经是SBTree了,问题出在其他地方,当涉及到between时,查询看起来区分大小写。是虫子吗?如果我写:从publishday=20151117的InputDocument中选择count(),或从publishday=20151117的InputDocument中选择count(),结果相同。从InputDocument中选择count(),其中publishDay在20151117和20151118之间有效,而如果我从InputDocument中选择count(),其中publishDay在20151117和20151118之间无效。真的很有趣!!!字段名始终区分大小写,而类/集群则不区分大小写。我同意,在这种情况下起作用的事实可能会产生误导。嗨,卢卡,谢谢你的回答:事实上,东方医生对此很清楚,没有正确阅读是我的错。因此,使用错误大小写“…where publishday=…”的查询可以正常工作,这是正确的?它不应该返回0个结果吗?误导我的是,=运算符没有区分大小写,而BETWEEN运算符没有区分大小写。除了我没有从顶点扩展之外,它与Thanksys运算符是一样的。问题不在于查询本身,而在于区分大小写。如果您指定“…where publishDay=”或“…where publishDay=”这两种方式都有效。使用between子句“publishDay”被视为区分大小写,因此只有在大小写正确的情况下查询才会工作。您好,我尝试了使用OR运算符和between进行选择,但只有在完全指定属性名称(区分大小写)的情况下才会得到一些结果。您可以在下面找到使用的查询:从MyDocument中选择publishDay=20151101或publishDay=20151104-从MyDocument中选择publishDay=20151101或publishDay=20151104-0结果从MyDocument中选择publishDay=20151101或publishDay=20151104-它仅在第一个条件下工作从MyDocument中选择其中publishday=20151101或publishday=20151104-仅在第二个条件下有效从MyDocument中选择publishday介于20151101和20151103之间的位置-从MyDocument中选择publishday介于20151101和20151103之间的位置-0结果我使用的是OrientDB 2.1.6,这是您的版本?