Я пытаюсь настроить индекс для столбца в ORACLE, который имеет данные типа JSON.Поле, в котором я настраиваю данные, присутствует в одних записях и отсутствует в других, в основном это поле является необязательным.
У меня уже есть код в hibernate, который запрашивает список идентификаторов, я хочу проиндексировать его в базе данных, чтобы поиск был эффективным.
Я пытался json_textcontains ,к сожалению, он работает только для одного значения, он не работает для списка, я использовал стратегию группы разделов CTXSYS.JSON_SECTION_GROUP SYNC (ON COMMIT) для создания индекса.
Я попытался настроить индекс для JSON_VALUEс ERROR ON ERROR NULL ON EMPTY , как рекомендовано Oracle, он все еще не показывает ожидаемые значения, когда я выполняю EXPLAIN PLAN при поиске.
CREATE INDEX PARAM_ADDRESS_ID_INDX ON EMPLOYEE_INFORMATION(
JSON_VALUE(PARAMETERS, '$.addressId' RETURNING VARCHAR2(4000) ERROR ON ERROR NULL ON EMPTY)
);
JSON внутри столбца PARAMETERS выглядит какпоказано ниже: -
{"type":"home","addressId":128,"description":"This is test address 1"}
{"type":"away","referenceId":3341,"description":"Test away description"}
{"type":"away","addressId":129,"description":"This is test address 2"}
Как вы можете видеть в первой записи, addressId присутствует во второй его нет, а в третьей ее присутствует.Таким образом, из моего кода, когда я делаю IN с использованием спящего режима JPA, я просто предоставляю addressIds со значениями 128,129.
Я ожидаю, что когда я сделаю запрос, я увижу информацию INDEX в ПЛАНЕ ОБЪЯСНЕНИЯ, но вместо этого я увижу ниже: -
-----------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 154 | 109K| 11864 (1)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| EMPLOYEE_INFORMATION| 154 | 109K| 11864 (1)| 00:00:01 |
-----------------------------------------------------------------------------------------
Большое спасибо за чтение, оцените ваши входные данные.