首页 > 解决方案 > 对大量数据使用像 JSON_EXTRACT 这样的 SQL 函数好不好

问题描述

我正在实现一个数据库,每天将达到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'

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

我的问题是。在这种情况下是否可以使用Mysql JSON_EXTRACTORACLE JSON_VALUE等SQL函数。

开放讨论。谢谢。

标签: mysqlsqldatabaseoracledatabase-performance

解决方案


如果您知道所有行都有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);

推荐阅读