我跑一个删除语句delete from score
where name not in (
    select name1 from user 
    union 
    select name2 from user 
    union 
    select name3 from user);http://topic.csdn.net/u/20080608/10/fef03bac-d9ad-4fd4-a2c7-de26c20de966.html数据库跑了半天还没出结果怎么办?CPU满的。数据库 name 2M   scorce 200M 都已经一个晚上了  还没结果。是不是有问题?

解决方案 »

  1.   


    delete from score 
    where name not in ( 
        select distinct name1 from user 
        union 
        select distinct name2 from user 
        union 
        select distinct name3 from user); 这样也一样
      

  2.   

    操作的次数为
    srcore的条数 × 三个表中name个数。
    如果数据量很大将会使用很长时间。
      

  3.   

    有没有办法加快速度?实在是很慢啊能不能限定一下范围 我们这里name是用数字的 还有另外的表对应。比如先限定score前20万条记录?
      

  4.   

    不知道两个表中真实的数据量是多少?
    可以把name1 name2 name3都加索引看看效果。
    如果有条件的话可以这样做
    1 新建一个和score 一样的数据表
    2 新建一个name表  内容是name1 name2 name3的和. 就是3个字段变成一个字段,并加索引
    3 insert into 新score表 (select * from score s,新name表 n where s.sorce = n.name) 
      

  5.   

    先单步执行看看效果,然后在整合执行看看,如果有问题就好好查查问题处在什么地方,如果没有问题的话那就好好看看的sql语句有没有问题,我的经验有一次使用text字段排序就造成了速度慢,后来改了就没有问题了。
      

  6.   

    语句没有问题 我自己搞了单条记录执行正常删除了。我现在想是不是只检查score的前10W记录 或者 user的前1000条记录 因为也就以前的删除了user帐号 基本后面的还没删除就发现数据库跑起来吃力了。
      

  7.   

    使用not in 和union效率感觉都很慢,你可以把union后的结果导入到新表里去,然后在操作试试delete from score s,newtable n
    where s.name!=n.name1; 
      

  8.   

    show processlist;
    看看状态,有没有lock
      

  9.   

    Try
    delete score as a from score as a right join (
        select name1 from user
        union
        select name2 from user
        union
        select name3 from user) as b where a.name is null;