Хорошо ли использовать функцию SQL, такую ​​как JSON_EXTRACT, для большого количества данных? - PullRequest
0 голосов
/ 27 ноября 2018

Я реализую БД, которая будет обрабатывать более 2000 записей в день, и я собираюсь получить данные с помощью функции SQL , такой как Mysql JSON_EXTRACT и ORACLE JSON_VALUE .becarse.Я храню данные в столбце JSON.

Я буду использовать функции Mysql JSON_EXTRACT и ORACLE JSON_VALUE для поиска в диапазоне данных, как показано ниже

SELECT *
FROM audit
where json_extract(detail_x,'$.eventDt') > '2017-10-01 00:00:00'
  And json_extract(detail,'$.eventDt')   < '2018-11-01 00:00:00'

Максимальный диапазон дат будет 30 дней .Итак, максимальное количество строк будет около 2000 * 30 = 60000 .

Мой вопрос.можно ли использовать SQL функцию, такую ​​как Mysql JSON_EXTRACT и ORACLE JSON_VALUE для этого сценария.

Открыто для обсуждения.Спасибо.

1 Ответ

0 голосов
/ 27 ноября 2018

Если вы знаете, что все строки имеют eventDt, то вы должны извлечь это в столбец.Индекс в столбце ускорит многие ваши запросы.Следует признать, что индекс может быть бесполезен для такого широкого промежутка времени, но он должен улучшить производительность при извлечении небольшого количества записей.

Цель JSON должна состоять в хранении данных, которые имеют неправильные форматы, которые нене вписывается в столбцы.MySQL не индексирует JSON напрямую.

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

alter table audit
    add column eventDt date generated as (json_extract(detail_x,'$.eventDt')) stored;

create index idx_audit_eventDt on audit(eventDt);
...