【发布时间】:2019-08-27 23:13:36
【问题描述】:
我正在尝试在 ORACLE 中包含 JSON 类型数据的列上设置索引。我正在设置数据的字段存在于某些记录中,而其他记录中不存在,基本上该字段是可选的。
我已经在 hibernate 中有查询 id 列表的代码,我想在数据库中对其进行索引,以便搜索高效。
我试过 json_textcontains,不幸的是它只适用于单个值它不适用于列表,我使用 section group CTXSYS.JSON_SECTION_GROUP SYNC (ON COMMIT) 策略来创建索引。
我尝试按照 Oracle 的建议使用 ERROR ON ERROR NULL ON EMPTY 在 JSON_VALUE 上设置索引,但当我在搜索中执行 EXPLAIN PLAN 时,它仍然没有显示预期值。
CREATE INDEX PARAM_ADDRESS_ID_INDX ON EMPLOYEE_INFORMATION(
JSON_VALUE(PARAMETERS, '$.addressId' RETURNING VARCHAR2(4000) ERROR ON ERROR NULL ON EMPTY)
);
PARAMETERS 列中的 json 如下所示:-
{"type":"home","addressId":128,"description":"This is test address 1"}
{"type":"away","referenceId":3341,"description":"Test away description"}
{"type":"away","addressId":129,"description":"This is test address 2"}
正如您在第一条记录中看到的那样,addressId 存在于第二条记录中,而第三条记录则存在。因此,当我使用 JPA hibernate 执行 IN 时,从我的代码中,我只提供值为 128,129 的 addressId。
我希望当我查询时我应该在 EXPLAIN PLAN 中看到 INDEX 信息,但我看到的是下面:-
-----------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 154 | 109K| 11864 (1)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| EMPLOYEE_INFORMATION| 154 | 109K| 11864 (1)| 00:00:01 |
-----------------------------------------------------------------------------------------
非常感谢您到目前为止的阅读,感谢您的意见。
【问题讨论】:
标签: java oracle hibernate jpa indexing