大家:
我正在使用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配置文件
显示个人资料
命令显示两个选择命令之间的主要区别是“发送数据”。
和
所以我的问题是:为什么json元素的最大操作比sum操作慢得多。 (顺便说一句,如果我把json元素(fv / 0)作为普通的浮点列类型,两个操作成本可以忽略不计)
任何想法都将受到赞赏!