DELETE F1
FROM friends F1, friends F2
WHERE F1.friend_id = F2.id
AND F2.friend_id = F1.id
AND F1.id > F1.friend_id
EDIT
A stronger syntax would be:
DELETE F1
FROM friends F1
JOIN friends F2 ON F1.friend_id = F2.id AND F2.friend_id = F1.id
WHERE F1.id > F1.friend_id
But the execution time is the same.
In addition, I created this little script for a quick and dirty test.
Results:
No index:
Dalen: 600 => 400 rows. Time: 0.0274
Mark: 600 => 400 rows. Time: 0.4323
Frosty: 600 => 400 rows. Time: 0.4081
Nick: 600 => 400 rows. Time: 0.3201
id friend_id:
Dalen: 600 => 400 rows. Time: 0.0201
Mark: 600 => 400 rows. Time: 0.0095
Frosty: 600 => 400 rows. Time: 0.0059
Nick: 600 => 400 rows. Time: 0.3257
(id, friend_id):
Dalen: 600 => 400 rows. Time: 0.0168
Mark: 600 => 400 rows. Time: 0.0057
Frosty: 600 => 400 rows. Time: 0.0041
Nick: 600 => 400 rows. Time: 0.3209
:
- : ,
- Frosty: , (Mark , " ", tmp. , tmp, , )