• 有表relation(id, aid, bid) 其中id为自增的id字段,主键。

    现要加一个(aid, bid)的唯一索引,那首先要去掉aid和bid重复的记录,过去我是这样做的:
    delete r1 from relation r1, relation r2 where r1.id>r2.id and r1.aid=r2.aid and r1.bid=r2.bid
    由于需要自连接,会见临时表,当relation表极大时,实际超过百万,速度就已经无法接受了,

    上周五晚上,灵感一来,突然想到了一个办法,试验下来果然比原来快:
    create table relation_new like relation;
    alter table relation_new add unique key(aid, bid);
    insert into relation_new select * from relation on duplicate key id=id;
    然后再把表名改为原来的releation即可,还等于做了一遍optimize。
    其实,原理就是忽略重复的key。
    当时觉得无比激动,可是后来想想,都忽略了干嘛还要update id=id?mysql的insert不是有ignore关键字吗?
    insert ignore into relation select * from relation
    这样不就都解决了吗?鄙视自己一下自己的记性,怎么老忘记ignore关键字。