本帖最后由 shorsun 于 2010-03-01 13:48:35 编辑

解决方案 »

  1.   

    没有什么特别好的办法。不过如果只是针对你的第一句的话。如果你创建一个索引,则速度会比较快。
    第一句:select id,name,time from recv_file   /*这句很慢,如何优化*/
    create index xxxx on recv_file(id,name,time)表中如果数据多,这种什么WHERE条件都没有的自然会进行全表扫描。索引主要是用于优化 where 这种条件查询。
      

  2.   

    longblob字段没有长度的设置吧。
      

  3.   

    如果data字段前面N个字节(MyISAM:N<1000,InnoDB:N<767)重复率不高的话试试对data字段添加前缀索引
      

  4.   

    longblob太长,导致扫描的页面过多且无效。建议拆成两个表,拼成视图,视图名与你原来表名一样,这样后面的结构都不用变了解?
      

  5.   

    了解你的意思,通过视图可以进行查询,但是插入时就没法搞定了,除非分两次插入数据。问题在于该表是一个规范,多个协作单位都需要使用该表,不能根据我们的要求而影响其它单位开发的程序,汗一个!
    不过你的这个回复让我想到或许能通过导数据的方式解决这个问题,就是当发现该表有数据时,将新增的数据排除掉blob字段后同步到另一个表中。不过貌似比较复杂。另外,如果能通过视图排除该字段也行,这个还没有试过,估计效率也不高,下午试一下。
      

  6.   

    我在主帖中说的有:“给 name,time 都添加索引(普通索引 index)后,第一句速度有改善,但仍很慢。”
    添加过索引,有一定改善,但仍不是很理想。
      

  7.   


    很简单啊,你一张表导入id,XX,XX,另一张表导入id,blob,两表通过id关联形成视图就行了
      

  8.   

    A表(id,XX,XX)
    B表(id,blob)
    视图V(id,xx,xx,blob)
    直接用insert into V(id,xx,xx,blob)插入数据时会失败。
    另外,由于该表结构已经提供给了其它单位,所以要保证其它单位使用时不会出错,所以放弃了这种做法。
      

  9.   

    添加索引可以解决问题,以前添加索引后效率不高原因是where子句中有like查询。结帖给分。