Tôi có một bảng có 300 000 bản ghi. Trong bảng này có duplicae hàng và tôi muốn cập nhật cột "lá cờ"Làm cách nào để tối ưu hóa truy vấn MySQL để cập nhật?
TABLE
------------------------------------
|number | flag | ... more column ...|
------------------------------------
|ABCD | 0 | ...................|
|ABCD | 0 | ...................|
|ABCD | 0 | ...................|
|BCDE | 0 | ...................|
|BCDE | 0 | ...................|
tôi sử dụng truy vấn này để cập nhật "cờ" cột:
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'
Truy vấn này làm việc rất rất từ từ (hơn 600 giây) cho 300 000 bản ghi này.
Làm cách nào để tối ưu hóa truy vấn này?
cấu trúc của bảng MY
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 ;
Nếu "tên" là lặp lại tôi muốn cập nhật flag_qty
Cấu trúc bảng là gì? Có một khóa chính có sẵn trên bảng này không? – nnichols
Mục đích của việc thiết lập cờ này là gì? Bạn đang làm một số xử lý tiếp theo dựa trên lá cờ này? – nnichols
Mục đích trên lá cờ này là IF có trong các hàng trùng lặp của bảng, cờ này là 1. Sau đó tôi muốn tạo bảng có các hàng trùng lặp và xóa các hàng này khỏi bảng chính. – dido