网上检索未果,近期测试了MySql 存储大字段LONGBLOB
对查询的影响。
当存储到了一定量的数据后,发现查询一定数据量的数据时会出现如下情况。
SELECT ID FROM mdc.lr_status_gant
where MODE_ID = 'EQUI' and F_ID = 2 and value = 'RUNNING' limit 100;
-- 报错
-- Error Code: 2013. Lost connection to MySQL server during query
SELECT ID FROM mdc.lr_status_gant
where MODE_ID = 'EQUI' and F_ID = 2 and value = 'RUNNING' limit 1;
-- 则可以正常返回
分析:
我认为应该是单条数据过大,在查询时,数据库服务一次加入内存进行运算的数据量超过了限制。
虽然可以通过 a.在数据库的MY.INI配置文件中添加max_allowed_packet = 500M
或者 b.限定一次返回的数据量 来解决问题,但是我们在数据库设计时也必须考虑大字段的应用。
附:测试表
CREATE TABLE `lr_status_gant` (
`ID` bigint(20) NOT NULL AUTO_INCREMENT,
`MODE_ID` varchar(45) DEFAULT NULL,
`F_ID` bigint(20) DEFAULT NULL,
`STAT_NAME` varchar(45) DEFAULT NULL,
`VALUE` varchar(45) DEFAULT NULL,
`DATA_TIME` datetime DEFAULT NULL,
`DURATION` int(11) DEFAULT NULL,
`DATA_VALU` longblob,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=216748 DEFAULT CHARSET=utf8