对于大量数据使用像 JSON_EXTRACT 这样的 SQL 函数是否合适

Din*_*esh 3 mysql sql database oracle database-performance

我正在实现一个数据库,每天将处理超过2000 条记录,我将使用SQL函数(例如Mysql JSON_EXTRACTORACLE JSON_VALUE )来获取数据。因为。我将数据存储在 JSON 列中。

我将使用Mysql JSON_EXTRACTORACLE 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'
Run Code Online (Sandbox Code Playgroud)

最大日期范围为30 天。因此,最大行数约为 2000 * 30 = 60000

我的问题是。对于这种情况,可以使用Mysql JSON_EXTRACTORACLE JSON_VALUESQL函数吗?

开放讨论。谢谢。

Gor*_*off 5

如果您知道所有行都有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);
Run Code Online (Sandbox Code Playgroud)