gpt4 book ai didi

java - Oracle : Indexing JSON type column in ORACLE, 查询的数据中可能缺少目标 JSON 字段

转载 作者:行者123 更新时间:2023-12-02 10:02:10 26 4
gpt4 key购买 nike

我正在尝试在 ORACLE 中具有 JSON 类型数据的列上设置索引。我正在设置数据的字段存在于某些记录中,但不存在于其他记录中,基本上该字段是可选的。

我已经在 hibernate 中有查询 id 列表的代码,我想在数据库上对此进行索引,以便搜索高效。

我尝试了json_textcontains,不幸的是它只适用于单个值,它不适用于列表,我使用节组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 |
-----------------------------------------------------------------------------------------

非常感谢您到目前为止的阅读,感谢您的投入。

最佳答案

首先,ORACLE OPTIMIZER 对于 154 行的表总是选择 FULL TABLE SCAN。用于选择索引的条目太少。但是,如果您想使用创建的索引,则必须使用优化器提示进行询问:

SELECT  /*+ INDEX(a PARAM_ADDRESS_ID_INDX)*/ *
FROM EMPLOYEE_INFORMATION a
WHERE ......

关于java - Oracle : Indexing JSON type column in ORACLE, 查询的数据中可能缺少目标 JSON 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55545727/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com