mysql - 对大量数据使用像JSON_EXTRACT这样的SQL函数好不好

标签 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'

最大日期范围将为 30 天。所以, 最大行数约为 2000 * 30 = 60000

我的问题是。对于这种情况,可以使用 SQL 函数(例如 Mysql JSON_EXTRACTORACLE 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/

相关文章:

mysql - 组合快速 MySQL 查询性能缓慢

mysql - 得到重复的数据行,如何解决这个问题?

mysql - SQL 连接条件

sql - 如何在我的 R 数据框中更改/清理此特定行值 [数据类型字符串]

android - 如何在android中检索存储在外部USB设备中的数据?

javascript - 在 PHP 中将二进制文件数据转换为 float 据

php - 从左连接返回 mysql 查询中的最后一行

mysql - 我的 MySQL 结果为空

mysql - where 子句中的未知列,它确实存在

mysql - 如何在 codeigniter 中执行自定义查询 - 分数表中用户的排名