Mam stolik z 300 000 rekordów. W tej tabeli mają duplicae wierszy i chcę zaktualizować kolumny "flagę"Jak mogę zoptymalizować zapytanie MySQL o aktualizację?
TABLE
------------------------------------
|number | flag | ... more column ...|
------------------------------------
|ABCD | 0 | ...................|
|ABCD | 0 | ...................|
|ABCD | 0 | ...................|
|BCDE | 0 | ...................|
|BCDE | 0 | ...................|
używam tej kwerendy do aktualizacji "Flag" kolumna:
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'
Ta kwerenda działa bardzo bardzo powoli (więcej 600 sekund) dla tego 300 000 rekordów.
Jak zoptymalizować to zapytanie?
STRUKTURA moim stole
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 ;
Jeśli "nazwa" jest powielać Chcę zaktualizować flag_qty
Jaka jest struktura tabeli? Czy na tej tabeli dostępny jest klucz podstawowy? – nnichols
Jaki jest cel ustawienia tej flagi? Czy robisz dalsze przetwarzanie na podstawie tej flagi? – nnichols
Celem tej flagi jest JEŻELI w tabeli zduplikowane wiersze tej flagi wynosi 1. Następnie chcę utworzyć tabelę z duplikatami wierszy i usunąć te wiersze z głównej tabeli. – dido