Есть таблица table1 c 3млн строк. Индекс на id есть.
Нужно в цикле на php сделать update одного поля по id последовательно для всех строк.
Написал на php скрипт, все хорошо, но каждые 1000 update отрабатывается за 8 сек. Так я буду до завтра ждать)
Explain посмотрел, индекс используется. В чем может быть проблема?
Таблица innodb
в цикле делается update table1 set url=$newurl where id=$id;
$newurl вычисляется в функции пхп и для каждой строки он разный и зависит от других скриптов
Тогда ясно ... Хотите выиграть в скорости, тогда пристегнитесь ))
Допустим есть такая структура для 10 млн строк
CREATE TABLE table1 (
`Id` int(11) NOT NULL,
`url` varchar(256) NOT NULL
PRIMARY KEY (`Id`)
) ENGINE=InnoDB
Чтобы ускорить загрузку, вам не нужно генерировать апдейт на лету.
Вам нужно выполнить отложенное вычисление в background процесс, где ваш скрипт будет
генерировать данные в файл - к примеру для SQL удобен будет CSV
Если у Вас PHP попробуйте создать асинхронный процесс создания файла CSV с вашими данными, например есть для этого фреймворк ReactPHP и когда процесс - success
В основном коде импортируйте данные в вашу таблицу
LOAD DATA LOCAL INFILE 'table1.csv'
-> INTO TABLE table1
-> FIELDS TERMINATED BY ','
-> LINES TERMINATED BY '\n'
-> IGNORE 1 LINES
-> (id, url);