Tengo una tabla con 300 000 registros. En esta tabla tienen duplicae filas y quiero actualizar la columna "bandera"¿Cómo puedo optimizar la consulta de MySQL para la actualización?
TABLA
------------------------------------
|number | flag | ... more column ...|
------------------------------------
|ABCD | 0 | ...................|
|ABCD | 0 | ...................|
|ABCD | 0 | ...................|
|BCDE | 0 | ...................|
|BCDE | 0 | ...................|
que utilizar esta consulta para la actualización de "bandera" de la columna:
UPDATE table i
INNER JOIN (SELECT number FROM table
GROUP BY number HAVING count(number) > 1) i2
ON i.number = i2.number
SET i.flag = '1'
Esta consulta trabajando muy, muy lentamente (más 600 segundos) para estos 300 000 registros.
¿Cómo puedo optimizar esta consulta?
ESTRUCTURA DE MI TABLA
CREATE TABLE IF NOT EXISTS `inv` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`pn` varchar(10) NOT NULL COMMENT 'Part Number',
`qty` int(5) NOT NULL,
`qty_old` int(5) NOT NULL,
`flag_qty` tinyint(1) NOT NULL,
`name` varchar(60) NOT NULL,
`vid` int(11) NOT NULL ,
`flag_d` tinyint(1) NOT NULL ,
`flag_u` tinyint(1) NOT NULL ,
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `pn` (`pn`),
KEY `name` (`name`),
KEY `vid` (`vid`),
KEY `pn_2` (`pn`),
KEY `flag_qty` (`flag_qty`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;
Si "nombre" es duplicar Quiero actualizar flag_qty
¿Cuál es la estructura de la tabla? ¿Hay una clave principal disponible en esta tabla? – nnichols
¿Cuál es el propósito de establecer esta bandera? ¿Estás haciendo un procesamiento adicional basado en esta bandera? – nnichols
El propósito en este indicador es SI tiene en filas duplicadas de tabla este indicador es 1. Después de eso quiero crear tablas con filas duplicadas y eliminar estas filas de la tabla principal. – dido