Json 查询与在 Oracle 12c 中使用 JSON 的 SQL 查询(性能)
Json query vs SQL query using JSON in Oracle 12c (Performance)
我正在使用 oracle 12c 和 Sql 开发人员 json
对于这个例子,我有以下 JSON:
{
"id": "12",
"name": "zhelon"
}
所以我为此创建了以下 table:
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 字段并向 table 添加新的列以缩短响应时间(我不知道这是否可能)
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';
我正在使用 oracle 12c 和 Sql 开发人员 json
对于这个例子,我有以下 JSON:
{
"id": "12",
"name": "zhelon"
}
所以我为此创建了以下 table:
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 字段并向 table 添加新的列以缩短响应时间(我不知道这是否可能)
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';