我正在实现一个数据库,每天要处理超过 2000 条记录,我将使用 SQL 函数获取数据,例如Mysql JSON_EXTRACT 和 ORACLE JSON_VALUE。因为。我将数据存储在 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 吗?
开放讨论。 谢谢。
最佳答案
如果您知道所有行都有 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);
关于mysql - 对大量数据使用像JSON_EXTRACT这样的SQL函数好不好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53497108/