我正在使用带有json的oracle 12c和Sql Developer
对于此示例,我具有以下JSON:
{
"id": "12",
"name": "zhelon"
}
因此,我为此创建了下表:
create table persons
id number primary key,
person clob,
constraint person check(person is JSON);
想法是在person列中保留先前的JSON,并使用以下查询获取该数据
SELECT p.person FROM persons p WHERE json_textvalue('$name', 'zhelon')
谈到性能,我很想提取一些json字段并将新的列添加到表中以缩短响应时间(我不知道这是否可能)
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
的正确语法,但我认为您有个好主意。如果需要,您还可以像其他任何列一样在此类列上定义索引。
但是,当您运行
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';
关于sql - 在Oracle 12c中使用JSON的Json查询与SQL查询(性能),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41465546/