表格说明COLUMN DATA_TYPE NULLABLE DEFAULT_VALUE ID VARCHAR2(16) No UPDATED_DATE TIMESTAMP(6) Yes DETAILS CLOB Yes TX_STATUS VARCHAR2(10) Yes TX_USER VARCHAR2(16) Yes ***PREMIUM NUMBER(10,2) Yes JSON_VALUE("DETAILS" FORMAT JSON , '$.policy.premium' RETURNING NUMBER(10,2) NULL ON ERROR)***
Where,
`
- DETAILS - JSON Document
- PREMIUM - column is virtual column.
`
``
如果我使用order by子句选择虚拟列,则查询执行将花费太多时间来运行选择查询。
以下查询花费32.23秒。***PREMIUM***是此处的虚拟列
select id,tx_status,updated_date,tx_user, ***PREMIUM*** from J_MARINE_CERT j order by j.UPDATED_DATE desc
删除***PREMIUM***后,需要0.009秒。
select id,tx_status,updated_date,tx_user from J_MARINE_CERT j order by j.UPDATED_DATE desc
即使在索引***PREMIUM,updated_date***之后,它也需要相同的时间(32.23)来执行。
1条答案
按热度按时间anauzrmj1#
我遇到了同样的问题,唯一好的解决方案是为来自JSON的值创建一个物化视图。
性能下降的原因是Oracle在内存中占用整个json以从中选择一个值。
来自Oracle文档