mysql的json数据类型

时间:2016-08-09 08:14:11

标签: mysql json

大家:

我正在使用mysql 5.7,并希望测试json数据类型的性能。

我使用follow sql创建表:

CREATE TABLE pm_data_tab_json (
    oid     varchar(16)    NOT NULL
    time    datetime       NOT NULL
    vals    JSON           NOT NULL,
    PRIMARY KEY (`oid`,`time`) 
);

我在表中插入大约一千万条记录来测试mysql json进程的性能。记录格式如下:

20110200001 | 2015-06-30 23:50:00 | {“fs / 0”:10,“fv / 0”:5212600}

我使用以下sql每3600秒获取最大fv / 0值:

select max( JSON_EXTRACT(vals, '$."fv/0"') ) AS val, max(time) AS valtime from pm_data_tab_json where oid='20110200010' group by UNIX_TIMESTAMP(time) DIV 3600;

输出为:4344行(0.58秒)

以及以下每3600秒得到fv / 0的总和。

select sum( JSON_EXTRACT(vals, '$."fv/0"') ) AS val, max(time) AS valtime from pm_data_tab_json where oid='20110200010' group by UNIX_TIMESTAMP(time) DIV 3600;

输出为:4344行(0.14秒)

我测试了很多次,结果几乎相同:“max”比“sum”长4倍,这个结果让我很困惑,因为“sum”操作需要比“max”更多的cpu周期,但结果是相反。

我使用mysql配置文件

  

显示个人资料

命令显示两个选择命令之间的主要区别是“发送数据”。

  • 第一个是“发送数据| 0.404505”

  • 第二个是“发送数据| 0.132669”

所以我的问题是:为什么json元素的最大操作比sum操作慢得多。 (顺便说一句,如果我把json元素(fv / 0)作为普通的浮点列类型,两个操作成本可以忽略不计)

任何想法都将受到赞赏!

0 个答案:

没有答案