the following code implements tagging the data. After a carPlate appears (set to 2 for the first time), the mark is invalid within 1 hour (set to 1), the first one for more than 1 hour is set to 2, and so on.
the main problem is that I have several tables with the same data structure and index. The result is a table with 90 million rows, and this code executes for more than 300 seconds.
in a table with 150 million rows, it takes more than 7000 seconds to execute. It really doesn"t understand. It has increased the
join_buffer_size
key_buffer_size
myisam_sort_buffer_size
sort_buffer_size
and other buffer to the original 4 times (before and after changing the buffer is the above results, 90 million rows on more than 300 seconds, 150 million rows on 6000-7000 seconds), it doesn"t work.
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;
the table structure is as follows:
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`)
)
;