如何在 Oracle NoSQL 中执行以下查询
How to do the following query in Oracle NoSQL
我打算使用 NoSQL 云服务作为我们的数据存储。我对 MAP 数据类型有疑问。假设我有一列“labels”(labels MAP(RECORD(value STRING, contentType STRING))
in table “myTable”,其中“labels”列是 MAP 数据类型,值是 RECORD 数据类型。
我想查询table其中return所有“标签”的键=特定值的行,sql语句是什么样的?我试过了:
select * from myTable where labels.keys($key=‘xxxx’)
这行不通。
是否需要为MAP中的label字段添加索引?任何性能改进?如果是,如何添加这个索引?
谢谢
请尝试以下语法
select * from myTable t
where t.labels.keys() =any "xxx"
如果你添加 exists
,你的语法就很好
select * from myTable t
where exists t.labels.keys($key= “xxx”)
关于你的性能问题
会有显着的性能提升。
如果您只想索引地图的字段名称(键),
你这样创建索引:
create index idx_keys on myTable(labels.keys())
如果你想索引它们的键和关联的值:
create index idx_keys_values
on myTable(labels.keys(), labels.values())
我打算使用 NoSQL 云服务作为我们的数据存储。我对 MAP 数据类型有疑问。假设我有一列“labels”(labels MAP(RECORD(value STRING, contentType STRING))
in table “myTable”,其中“labels”列是 MAP 数据类型,值是 RECORD 数据类型。
我想查询table其中return所有“标签”的键=特定值的行,sql语句是什么样的?我试过了:
select * from myTable where labels.keys($key=‘xxxx’)
这行不通。
是否需要为MAP中的label字段添加索引?任何性能改进?如果是,如何添加这个索引?
谢谢
请尝试以下语法
select * from myTable t
where t.labels.keys() =any "xxx"
如果你添加 exists
,你的语法就很好select * from myTable t
where exists t.labels.keys($key= “xxx”)
关于你的性能问题
会有显着的性能提升。 如果您只想索引地图的字段名称(键), 你这样创建索引:
create index idx_keys on myTable(labels.keys())
如果你想索引它们的键和关联的值:
create index idx_keys_values
on myTable(labels.keys(), labels.values())