新手:OrientDB基本SQL查询

新手:OrientDB基本SQL查询,sql,orientdb,Sql,Orientdb,OrientDB版本1.7.10 我们正在运行以下两个查询,返回的记录数不同 select from (select from sitedata ) where localdate='2014-09-24' select from sitedata where localdate='2014-09-24' 第一个查询返回6条记录,而第二个查询只返回一条记录 Sitedata是顶点,localdate是日期数据类型为的属性。 还有一个在localdate上创建的索引 从概念上讲,这两个查询之间

OrientDB版本1.7.10

我们正在运行以下两个查询,返回的记录数不同

select from (select from sitedata ) where localdate='2014-09-24'
select from sitedata where  localdate='2014-09-24'
第一个查询返回6条记录,而第二个查询只返回一条记录

Sitedata是顶点,localdate是日期数据类型为的属性。 还有一个在localdate上创建的索引

从概念上讲,这两个查询之间的区别是什么?在第一个场景中,我们在RDBMS世界中创建一个称为内联视图的视图,然后在内联视图中的记录上放置一个过滤器。我们假设它必须在内部从数据库中获取所有记录,然后在内存中进行过滤。
在第二次查询中,数据被直接过滤,索引将被使用。

区别在于,在第一次查询中,索引没有被使用。 因此,它对类sitedata进行完整扫描并应用过滤器

引擎无法使用索引,因为查询的目标是嵌套查询,
因此,在应用内存中的过滤时,它先计算嵌套查询,然后计算外部查询

Update:问题在于索引。索引是作为字典创建的,这导致了问题。更改索引解决了这个问题。理论上,两个查询将始终产生相同的结果。在本例中,索引意外地在列localdate上设置为dictionary。删除索引会使两个查询返回相同的数据集。因此,问题在于该指数。