The Address Book was built before 3rd party apps were even considered (remember all apps were web apps at launch) and was optimized for fast syncing. At the lowest level it stores an address record, and any required diffs in SQLite.
Every time the AB is accessed, all the diffs get reapplied. Normally this wouldn't be a problem, as people don't edit their address books often enough to generate a ton of entries.
Unfortunately the old Facebook iOS app and a few others that allowed you to "keep your contacts up to date" would hit every single contact in your Address Book every time the app was activated with a hidden ABPersonViewController. The allowsEditing property was set to YES every time, which generates a new diff with no (or a minor) change.
Diffs were sycned back to the computer, but AFAIK "merges" only happend on OS upgrades, since it was unlikely a user would be making millions of edits.
(this is all roughly from memory based on a painful debugging session with our iOS guy and a few back and forth tickets with Apple looking into extremely slow AB access for some users.)