繁体   English   中英

在Oracle 12c中使用JSON的Json查询与SQL查询(性能)

[英]Json query vs SQL query using JSON in Oracle 12c (Performance)

我正在使用oracle 12c和Sql Developer与json

对于此示例,我有以下JSON:

   {
        "id": "12",
        "name": "zhelon"
   }

所以我为此创建了以下表格:

create table persons
id number primary key,
person clob,
constraint person check(person is JSON);

这个想法是将以前的JSON保留在人员列中,并使用后续查询来获取该数据

SELECT p.person FROM persons p WHERE json_textvalue('$name', 'zhelon')

谈到perfonce,我很有兴趣提取一些json字段并在表中添加新的colum以改善响应时间(我不知道是否可能)

create table persons
id number primary key,
name varchar(2000),
person clob,
constraint person check(person is JSON);

去做这个:

SELECT p.person FROM persons p WHERE p.name = 'zhelon';

我的问题是:

查询获取数据的最佳方法是什么? 我想减少响应时间。

哪个查询可以更快地获取数据?

SELECT p.person FROM persons p WHERE json_textvalue('$name', 'zhelon') 

要么

SELECT p.person FROM persons p WHERE p.name = 'zhelon';

您可以像这样创建一个虚拟列:

ALTER TABLE persons ADD (NAME VARCHAR2(100) 
   GENERATED ALWAYS AS (JSON_VALUE(person, '$name' returning VARCHAR2)) VIRTUAL);

我不知道JSON_VALUE的正确语法,但我认为你JSON_VALUE一个想法。

如果需要,您还可以像任何其他列一样在这些列上定义索引。

但是,当您运行SELECT p.person FROM persons p WHERE p.name = 'zhelon'; 我不知道哪个值优先,来自JSON或列的p.person

为了安全起见,最好使用不同的名称:

ALTER TABLE persons ADD (NAME_VAL VARCHAR2(100) 
   GENERATED ALWAYS AS (JSON_VALUE(person, '$name' returning VARCHAR2)) VIRTUAL);

SELECT p.person FROM persons p WHERE p.NAME_VAL= 'zhelon';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM