CREATE TABLE Keywords
(
keyID int NOT NULL AUTO_INCREMENT, 
PRIMARY KEY(keyID),
KeyName text,
KeyNumber text,
KeyFlag int,
KeyNo int
);
现在这个表里大概有五千万左右的记录,字段KeyName有不少重复值,现在我想把这些重复的记录找出来并且删除,只保留最先出现的一条记录。KeyNumber是唯一的,没有重复值。KeyFlag和KeyNo有可能相同也有可能不同。现在想请大家帮我想个效率快点的执行语句。我自己写的效率太低,所以麻烦大家了!!!

解决方案 »

  1.   


    select * from tt a where not exists(select 1 from tt where a.KeyName=KeyName and 
    a.Keyid>Keyid)在KeyName上建立索引
      

  2.   

    delete a from Keywords a left join (select min(keyID) as minKeyID from Keywords group by KeyName) b on a.keyid=b.minkeyid
    where b.minkeyid is null
      

  3.   

    create table newtt as select * from tt a where not exists(select 1 from tt where a.KeyName=KeyName and 
     a.Keyid>Keyid);
    truncate tt;
    insert into tt select * from newtt;
    估计这样要快一些