mysql - 对大量数据使用像 JSON_EXTRACT 这样的 SQL 函数好不好
问题描述
我正在实现一个数据库,每天将达到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。
我的问题是。在这种情况下是否可以使用Mysql JSON_EXTRACT和ORACLE JSON_VALUE等SQL函数。
开放讨论。谢谢。
解决方案
如果您知道所有行都有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);
推荐阅读
- asp.net-mvc - IIS Url 使用正则表达式重写重定向到错误的目标
- java - 接收没有 Content-Type 标头的 RESTFUL 请求
- sql - PostgreSQL 创建计数,计算不同的列
- node.js - mediawiki - parsoid http:401 需要登录
- python-3.x - 在一张图中为不同的数值变量分组箱线图
- python - 如何为我的代码修复错误“TypeError:'int' object is not iterable”?
- javascript - 状态未按要求设置(React、Hooks)
- angular - 在 Ngrx 中的一个又一个动作中调度动作时管理状态而不删除先前的状态
- jenkins - Sonarqube 和 Jenkins 与 I/O 异常的集成
- c# - 如何避免在 MVC 架构中的 post 方法之后再次获取模型数据?