mysql 1.5倍数据量导致20多倍的执行时间?
以下代码,实现对数据进行标记,在某carPlate出现后(第一次设置为2),1小时内再出现标记为无效(设置为1),超过1小时的第一个再设置为2,以此类推。
主要问题在我有若干个表,数据结构、索引都一样,结果在9000万行的表,这个代码执行大概300多秒;
在1.5亿行的表,执行居然要7000多秒,实在是搞不明白,已经加大了
join_buffer_size
key_buffer_size
myisam_sort_buffer_size
sort_buffer_size
等buffer为原来的4倍(改buffer前后都是上边的结果,9000万行就300多秒,1.5亿行就6000-7000秒),不起作用。
SET @lastCarPlate='',@lastCheckTime='',@state=0;
update foreignAna_source_data_cameraPoint_201801NA t
set
t.tripState=@state:=case when @lastCarPlate<>t.carPlate or TIMESTAMPDIFF(MINUTE,@lastCheckTime,t.throughTime)>=60 then 2 else 1 end,
t.tripState= case when 'x'=(@lastCarPlate:=t.carPlate) or 'x'=( @lastCheckTime:=case when @state=1 then @lastCheckTime else t.throughTime end) then @state else @state end
where t.dataValid>0 and t.cameraPoint_id in (SELECT addressID from baseService_camerapoint_base_info where crange=2)
ORDER BY
t.dayOfMonth,t.carPlate,t.throughTime;
表结构如下:
CREATE TABLE `NewTable` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`carPlate` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`plateColorTail` tinyint(4) NOT NULL ,
`cameraPoint_id` mediumint(9) NOT NULL ,
`throughTime` datetime NOT NULL ,
`driveDirection` tinyint(4) NOT NULL ,
`dataValid` tinyint(4) NOT NULL ,
`dayOfMonth` tinyint(4) NULL DEFAULT NULL ,
`zoneOfDay` smallint(6) NULL DEFAULT NULL ,
`tripState` tinyint(4) NULL DEFAULT NULL ,
PRIMARY KEY (`id`)
)
;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论