У меня есть следующий оператор SQL для удаления:
delete w,r from table1 w, table2 r where (w.status=1 or r.status=1)
show engine innodb status показывает следующее. скорость чтения (237,29 чтения / с) относится к чтениям после условия фильтра (где)? или это относится ко всем элементам соединения до фильтра? Это важно, так как я пытаюсь оценить время, необходимое для завершения запроса. Обе таблицы очень большие, но отфильтрованные результаты относительно малы.
ROW OPERATIONS -------------- 1 queries inside InnoDB, 0 queries in queue 1 read views open inside InnoDB Main thread process no. 5163, id 1090357568, state: waiting for server activity Number of rows inserted 25005429, updated 1722842, deleted 371088, read 2176564571 0.00 inserts/s, 0.00 updates/s, 0.00 deletes/s, 237.29 reads/s
Я ошибаюсь или вы не указали какое-либо условие соединения для w и r? Это означает, что вы выполняете большое декартово соединение обеих таблиц, это определенно будет длиннее двух запросов на удаление, по одному в каждой таблице.
Разве у вас нет чего-то, что связывает w и r друг с другом, например:
delete w,r
from table1 w ,table2 r
where (w.r_id=r.r_id)
and (w.status=1 or r.status=1)
или, по крайней мере, вы можете присоединиться к ним в поле статуса. И очевидно, что индексирование поля статуса просто необходимо.