2017-01-04 6 views
3

Я использую оракула 12с и SQL Developer с JSONJson запрос против SQL запроса с использованием JSON в Oracle 12c (Performance)

Для этого примера я имею последующие 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') 

Говоря о perfonce, я интересную извлечь некоторое поле 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'; 

ответ

1

Вы можете создать виртуальный столбец, как это:

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'; 
+0

Я сделал это, но мой вопрос о Perfomance – cheloncio

+0

Если вы создаете индекс на столбце 'name' производительность будет значительно лучше. –

+0

индекс всегда улучшает perfonamce, но для этого случая, что происходит, если я индексирую clob collumn? @WernfriedDomscheit – cheloncio