gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 20:56:18 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com