有表 A B C D E F GA.id = B.aid = C.aid = D.aid = E.aid = F.aid = G.aid现在要把id为1的数据在所有表中全部删除刚开始写的循环删除 但执行效率太慢了有没有更好的办法使效率更高

解决方案 »

  1.   

    delete from A where id=1;
    delete from B where aid=1;
    .........................
      

  2.   


    我也是这么写的 循环array(A,B,C,D,E,...);然后删除的 可能由于表中数据太多(大概一百三十万条左右)
    删除一条大概需要3 4秒 
      

  3.   

    删除一条大概需要3 4秒
    那你的sql是怎么写的,不然优化下你的sql
      

  4.   

    在所有表的 aid 上建索引
    在循环中逐个操作如果都是 InnoDB 类型表
    那么在除 A 外的表的 aid 上建 A.id 的外键
    只 delete from A where id=1 即可
      

  5.   

    DELETE FROM A WHERE `id` = 1;DELETE FROM B WHERE `aid` = 1;DELETE FROM C WHERE `aid` = 1;DELETE FROM D WHERE `aid` = 1;DELETE FROM E WHERE `aid` = 1;DELETE FROM F WHERE `aid` = 1;DELETE FROM G WHERE `aid` = 1表是myisam的 索引已加上 但我感觉效率应该出在循环执行sql语句上面 每执行一条sql语句就打开一个mysql的资源句柄 加上数据量大 执行效率就不高 所以如果把sql放在一起一块执行 应该效率会提升 不知理解的是否正确 请老大指教
      

  6.   

    如果你在命令行或控制台中操作,自然可以一次性写入多条指令。
    效率不是主要问题,让他慢慢做就是了但是php为防止SQL注入,每次只能执行一条SQL指令
      

  7.   


    $sql = 'DELETE FROM A WHERE id=1;DELETE FROM B WHERE aid=1;DELETE FROM C WHERE aid=1;DELETE FROM D WHERE aid=1;DELETE FROM E WHERE aid=1;DELETE FROM F WHERE aid=1;DELETE FROM G WHERE aid=1 ';
    shell_exec('mysql -uroot -p1234 aaa -e "'.$sql.'"');
    这样就好许多了 这就结贴