Игнорирование возможностей баз данных и тупое копирование пхп кода из проекта в проект от древних времен приводит к печалькам. Когда у Вас маленький маленький сайт — это одно, но когда записей становится много, на самом деле много, каждый лишний чих убивает один нейрон мозга разработчика. Простые и понятные вещи, которые нужно каждый раз проверять(
Единичные операции с таблицами заменяем одной операцией
DELETE FROM table WHERE id=1; DELETE FROM table WHERE id=2; DELETE FROM table WHERE id=3;
DELETE FROM table WHERE id IN (1,2,3);
Таким же образом группируем добавления записей и обновления (кажется очевидным, но в половине виденных мною скриптах в цикле происходит запись, а не формирование одного запроса)
INSERT INTO table VALUES (1,2); INSERT INTO table VALUES (1,2); INSERT INTO table VALUES (1,2);
INSERT INTO table VALUES (1,2), (1,2), (1,2);
Обновление чуть покруче выглядит (автомагия по ключевому полю), но работает зато быстро быстро
UPDATE table SET val=1 WHERE id=1; UPDATE table SET val=2 WHERE id=2; UPDATE table SET val=3 WHERE id=3;
INSERT INTO table (val, id) VALUES (1, 1), (2,2), (3,3) ON DUPLICATE KEY UPDATE table.val = VALUES(val);
Удаление большого количества записей из огромной таблицы оказывается лучше заменить массовыми операциями (странно, но вот так вот)
DELETE FROM table WHERE something
RENAME TABLE table TO table_old; CREATE TABLE table FROM table_old; INSERT INTO table SELECT * FROM table_old WHERE NOT something;
Бонусные размышлизмы. Если у Вас есть логика, которая затрагивает обновление кешей в соседних таблицах (дада, не все данные надо дергать джоинами, пересчитывать каунтами и тд — избыточность таблиц может не сильно увеличить размер базы, зато на порядки — скорость) — делайте триггеры. Если у Вас есть бизнес логика по куче таблиц — пишите функции в базе данных — это как минимум весело!