Delete with Cascade [message #2632] |
Tue, 23 November 2010 08:30 |
gpatti
Messages: 283 Registered: August 2008
|
Senior Member |
|
|
I have a couple of tables which have a master/detail relationship and delete integrity set to cascade. I've noticed that if I delete a master record (from a LIST screen) the delete operation can take a long time and even occasionally times out. Typically, there may be 200 - 250 detail rows related to the master row (so not huge numbers).
As far as I know my indexes are all set correctly. Is the performance possibly related to the frameowrk iterating each detail row and deleting it separately?
If so would a better solution be for me to remove the cascade option and manually delete the details rows on deletion of a master row in a single transaction?
Thanks,
Graham
|
|
|
Re: Delete with Cascade [message #2633 is a reply to message #2632] |
Wed, 24 November 2010 13:57 |
AJM
Messages: 2367 Registered: April 2006 Location: Surrey, UK
|
Senior Member |
|
|
Yes. Each child record is read individually so that the deleteRecord() method can be called to deal with any grandchildren (and great-grandchildren, et cetera). If you have audit logging turned on then eah deleted record is also written to the log file.
If you want to turn logging off for deletes you can set $this->audit_logging to FALSE in the _cm_pre_deleteRecord() method an back to TRUE in the _cm_post_deleteRecord() method.
If you want to delete all children and ignore the possibilty of grandchildren you can insert code in the _cm_pre_deleteRecord() method to cycle through the array of child tables and perform a deleteSelection() on each one. This will then delete any child records on that table without having to read them first.
Tony Marston
http://www.tonymarston.net
http://www.radicore.org
|
|
|