bminaiev
@bminaiev

Нужен совет по MySQL и Php (как правильно составить запрос)?

Есть БД приблизительно на миллион записей у которой 4 поля: name, summ, original, original_already. Изначально первые три поля заполнены, нужно написать максимально оптимальный по времени/памяти запрос, который будет обновлять четвертое поле. Для каждой записи original_already должен равняться 1, если хотя бы в одной записи БД, у которой совпадают значения name и summ с текущей, значение original=1. В противном случае, в поле должен быть записан 0.


«Лобовое» решение (два вложенных цикла) не пройдет по времени. Хочется, чтобы запрос/скрипт работал не более часа и загружал не более 512M.
  • Вопрос задан
  • 2794 просмотра
Пригласить эксперта
Ответы на вопрос 3
@Ano
я бы попробовал
BEGIN;
create temporary table TMP
  as select name, summ
    from THETABLE
    where original = 1
    group by name, summ;
update THETABLE set original_already = 0;
update THETABLE inner join TMP on TMP.name = THETABLE.name and TMP.summ = THETABLE.summ
  set THETABLE.original_already = 1
drop table TMP;
COMMIT;
Ответ написан
Комментировать
rudevich
@rudevich
web
«Для каждой записи original_already должен равняться 1, если хотя бы в одной записи БД, у которой совпадают значения name и summ с текущей, значение original=1.» можно по-русски? ))
Ответ написан
taliban
@taliban
php программист
Если критичны рессурсы = крон + выборка по 1000 строк за раз. Как-то так.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы