有一个表因为有一个字段为blob类型,而这个表所占的硬盘空间现在达到了20多G,这个表现在控制台select、update或者delete一条数据都会慢的令人无法忍受(这种情况下本人在后台还未成功删除过一条数据),这个表的主键时increment类型的。请问如何解决这种情况下的速度的问题呢?谢谢了

解决方案 »

  1.   

    表类型是什么?如果是MyISAM,并且该表的定义里只有一个VARCHAR、xxxTEXT或者xxxBLOB字段的话,MySQL会自动选择表类型为MyISAM Dynamic。对这种表的频繁修改会产生大量的碎片,用OPTIMIZE TABLE进行碎片整理试试。(参考自《MySQL5权威指南》)
      

  2.   

    看一下MYSQL的优化吧 。
    http://blog.chinaunix.net/u/29134/showart_264480.html
      

  3.   

    我的表类型是InnoBDB的,另外建立了主键不就等于有了索引了吗?那么还需要什么东西呢
      

  4.   

    SELECT、UPDATE、DELETE的时候WHERE条件只用到主键吗?
      

  5.   

    BDB类型的表,当进行,更新,删除操作时,要进行表级的锁,所以操作起来会比较慢。
    建议楼主改为InnoDB类型的表。
    两种表类型,都可以支持事务的。同意用 OPTIMIZE TABLE进行优化,
    但是这种优化过程会花费很长时间,楼主要事先准备好。
      

  6.   

    我的表就是InnoDB类型的,多打了一个字母。这个表的update和delete所用的查询条件都是用的主键,但是有一点很奇怪,好像在应用程序里显示一条记录好像速度还可以接受,不知为什么update和delete在后台就是这么慢
      

  7.   

    如果在where查询了一个不是索引的字段,这个字段不是主键,那么这个字段该建立什么索引?