我正在使用 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')
谈到性能,我很想提取一些 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';
时我不知道哪个值优先,
p.person
来自 JSON 或列。为了安全起见,最好使用不同的名称:
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/