本帖最后由 21cnWin 于 2011-03-21 00:33:54 编辑

解决方案 »

  1.   

    说明不是MYSQL本身的问题。检查一下INSERT的时候是不是有其它进程在锁定表。
      

  2.   

    insert into a (f1,f2) select b.f1,b.f2 from b,c where b.id=c.id
    进入MYSQL后,在命令行下运行,速度如何
      

  3.   

    直接在mysql shell 下运行,结果是一样的慢极了,真是纳闷了
      

  4.   

    select b.f1,b.f2 from b,c where b.id=c.id
    速度如何
      

  5.   

    insert into a (f1,f2) select b.f1,b.f2 from b,c where b.id=c.id
    语句上我是使用了 use index (id) 的,难道是因为 b 表太大 2G多?查看进程状态一直处于Sending data 二十多分钟,Sending data 后的状态没看到就执行完毕了
      

  6.   

    select b.f1,b.f2 from b,c where b.id=c.id
    这个语句要多久? 到底是INSERT慢还是SELECT慢?
      

  7.   

    a 表是空表,a、b、c 都是MyISAM
      

  8.   

    你将A表修改为INNODB,打开事务再插入试试,
    OR
    将select b.f1,b.f2 from b,c where b.id=c.id结果保存为TXT,再LOAD DATA 导入A表试试
      

  9.   

    导出txt,我曾经试过,很快,57秒,再导入a表67秒
      

  10.   

    insert into 这个语句,是因为一个update语句很慢,所以我将update语句拆分成4个语句来实现,其中第一个语句就是这个insert into,其它3个语句很快
      

  11.   

    真的是闹不明白了,为什么insert into会出现这种问题,影响它的到底有多少因素,查手册上的因素好像都没什么影响,难道还是要从表机构、甚至是引擎上解决?
      

  12.   

    select b.f1,b.f2 from b use index (f1) where exists (select c.sd01 from c use index (f1) where c.f1=b.f1)
    在phpmyadmin中SQL
    查询花费 1.6992秒
      

  13.   

    要知道PHPADMIN只显示了部分记录。建议直接在MYSQL命令行中检查。可以使用 profile 
      

  14.   


    可问题是在phpmyadmin中insert into很快,为什么在mysql中却那么慢?
      

  15.   

    insert into a (f1,f2) select b.f1,b.f2 from b,c where b.id=c.id limit 100 试试。看到底是不是插入的原因。
      

  16.   

    b、c表索引也就都只剩下id了,要插入的a表也去除索引了,不知道怎么解决了?phpmyadmin 中 插入那么快,显示部分记录以前,它已经完全插入完毕了而mysql中insert into是怎么个机制?
      

  17.   

    应该不会吧,phpmyadmin也是交给MYSQL执行的
      

  18.   


    你的慢是inset select语句还是mysql命令呢?
      

  19.   

    放在一个事物里,或设置innodb_flush_log_at_trx_commit=0 试试呢
      

  20.   

    问题已解决,我的问题是因为update特慢造成的,所以想到分步优化,休息了一周,今天忽然想到,还是采取老办法,垂直、水平重新划表,3张千万记录的大表拆分成几张有关联的要set值的小表,近20条update语句的执行时间由1小时缩短至10分钟,谢谢大家关心,结贴散分了。