我正在实现一个数据库,它将每天访问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\u extract和oracle json\u value,可以吗。
对废弃开放。谢谢。
2条答案
按热度按时间gkl3eglg1#
mysql 8.0.21引入了一个新函数
JSON_VALUE
:json\u值(json\u doc,path)
按照指定文档中给定的路径从json文档中提取值,并返回提取的值,还可以选择将其转换为所需的类型。
json_value()简化了在json列上创建索引的过程,因为在许多情况下不需要先创建生成的列,然后再在生成的列上创建索引。在创建具有json列的表t1时,可以通过在表达式上创建索引来实现这一点,该表达式使用对该列进行操作的json\ U value()(具有与该列中的值匹配的路径)
在这种情况下:
db<>小提琴演示
z4iuyo4d2#
如果你知道所有的行都有
eventDt
,则应将其提取到列中。列上的索引将加快许多查询的速度。诚然,索引在如此宽的时间跨度内可能没有用处,但在检索少量记录时,它应该会提高性能。json的目的应该是存储不适合列的不规则格式的数据。mysql不直接索引json。
始终可以使用生成的列添加索引: