swa*_*er7 5 php mysql myisam duplicate-removal
我有MySQL MyISAM表:
表朋友(id,friend_id):
1,5
5,1
2,6
6,2
3,7
如何删除反向记录?如果记录值"1,5"存在值为"5,1"的记录,则需要删除"5,1".
Thanx寻求帮助!
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
Run Code Online (Sandbox Code Playgroud)
编辑
一个更好的语法将是:
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
Run Code Online (Sandbox Code Playgroud)
但执行时间是一样的.
同样,我已经创建了这个小脚本,用于快速和肮脏的基准测试.
结果:
没有索引:
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
结论:
| 归档时间: |
|
| 查看次数: |
657 次 |
| 最近记录: |