Всем привет!
Есть класс удаления данных из БД. суть такая (удаляем комментарий):
Оговорюсь: удаление происходит как правило по id или комбинации id, mode_id - индексы присутствуют и все происходит быстро. Но в итоге получается около нескольких сотен запросов нормально ли это?
public function delComments($id){
// удаляем лайки к комментариям
$this->db->squery("DELETE FROM `likes_comm` WHERE `comm_id` = {$id}");
// удаляем события связанные с этим комментарием
$this->delFeedEvents('comments', $id);
// проверяем наличие дочерних комментариев в дереве
$res = $this->db->squery("SELECT `id` FROM `comments` WHERE `parent_id` = {$id}");
while($row = $res->fetch_assoc()){
// рекурсия по каждому найденному комментарию
$this->delComments($row['id']);
}
// проверяем наличие изображений в комментарии
$res = $this->db->squery("SELECT `id` FROM `images` WHERE `mode` = 'comments' AND `mode_id` = {$id}");
while($row = $res->fetch_assoc()){
// рекурсия по каждому найденному изображению
// нужна для того, что в каждом изображении могут быть свои комментарии, лайки и т.д. (разве что там уже нельзя опубликовать картинку) и там выходит похожий метод как и этот с комментариями.
$this->delImages($row['id']);
}
// удаляем сам коммент
$this->db->squery("DELETE FROM `comments` WHERE `id` = {$id}");
}
Вопрос. На сколько сложно для БД выполнение таких (простых на мой взгляд) запросов в таком количестве (200+)?
Есть ли какой-то способ вместо рекурсии, который также пройдется по каждой сущности и удалит данные из базы, но сохранив такое количество запросов?
Позже я изменю свой способ на удаление через триггеры... буду в каждом методе этого класса создавать триггер, удалять данные, а потом удалять триггер (мне так проще контролировать эти связи). Но сейчас я хочу найти способ оптимизации моих запросов именно через php.