Json query vs SQL query using JSON in Oracle 12c (Performance)
我正在使用带有json的oracle 12c和Sql Developer
对于此示例,我具有以下JSON:
1 2 3 4 | { "id":"12", "name":"zhelon" } |
因此,我为此创建了下表:
1 2 3 4 | CREATE TABLE persons id NUMBER PRIMARY KEY, person CLOB, CONSTRAINT person CHECK(person IS JSON); |
这个想法是在person列中保留先前的JSON,并使用以下查询获取该数据
1 | SELECT p.person FROM persons p WHERE json_textvalue('$name', 'zhelon') |
谈到性能,我很想提取一些json字段并将新的列添加到表中以缩短响应时间(我不知道这是否可能)
1 2 3 4 5 | CREATE TABLE persons id NUMBER PRIMARY KEY, name VARCHAR(2000), person CLOB, CONSTRAINT person CHECK(person IS JSON); |
去做这个:
1 | SELECT p.person FROM persons p WHERE p.name = 'zhelon'; |
我的问题是:
进行查询以获取数据的最佳方法是什么? 我想减少响应时间。
哪个查询可以更快地获取数据?
1 | SELECT p.person FROM persons p WHERE json_textvalue('$name', 'zhelon') |
要么
1 | SELECT p.person FROM persons p WHERE p.name = 'zhelon'; |
您可以创建一个虚拟列,如下所示:
1 2 | ALTER TABLE persons ADD (NAME VARCHAR2(100) GENERATED ALWAYS AS (JSON_VALUE(person, '$name' returning VARCHAR2)) VIRTUAL); |
我不知道
如果需要,您还可以像其他任何列一样在此类列上定义索引。
但是,当您运行
我不知道哪个值优先于JSON或列中的
为了安全起见,最好使用其他名称:
1 2 3 4 | 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'; |