База данных перегружает удалить строки с отношениями?
всем добрый день!
Я с сомнением, и я хочу, обзоры repeito.
Я строю систему php + laravel.
у Меня есть отношения между таблицами, например: Users->Roles
.
Предполагается, что есть 10.000 users, зарегистрированных с
Role == Admin
. Если я удаляю a Role Admin, система теоретически должен был бы удалить 10.000 строки таблицыrole_users
потому что Role Admin перестанет существовать.
Это приведет 10.000 queries? Перегрузит BD?
Объятий
2 answers
В любой реляционной системе, если у вас есть отношения, что указывает на то, что удаления родительского элемента удаляет дочерние элементы каскада, удаления одного элемента отца и всех его детей, происходит в одном query.
, Если это будет перегружать или не базы зависит от потока удаления каскада и размер масса данных, чтобы удалить. Записи пользователей могут иметь другие отношения со своими детьми, которые также могут быть удалены в каскад, пример. Но в целом, удалить быстро. Особенно, если отношения между элементами наличии индексирования в столбце " стороны "сын" отношения.
Вес всего находится в обработке базы данных. Pra приложения, одного запросов в одном соединении выполняется.
Он будет генерировать да-запросов, чтобы удалить и создаст дополнительную работу, чтобы поднять все места, которые должны быть удалены вместе. Но такой подход, on delete cascade, который делает его выпадать ключи, связанные с тем, является более быстрой, что если вы попросите сделать 10mil deletes.
, Если будет перегружать не чтобы сказать, во многом будет зависеть от вашей машины. Но это всегда интересно создавать индексы для ключей всех таблиц. Дополнительное чтение: http://www.codesynthesis.com/~boris/blog/2012/04/12/explicit-sql-delete-vs-on-delete-cascade/