同题看到一个文档上说,想比char , INNODB最好用varchar,这个可以理解,但是为什么MYISAM建议用定长的数据列?为什么呢为什么呢

解决方案 »

  1.   

    当您的问题得到解答后请及时结贴.
    http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
    http://topic.csdn.net/u/20100428/09/BC9E0908-F250-42A6-8765-B50A82FE186A.html
    http://topic.csdn.net/u/20100626/09/f35a4763-4b59-49c3-8061-d48fdbc29561.html8、如何给分和结贴?
    http://community.csdn.net/Help/HelpCenter.htm#结帖
      

  2.   

    我谈谈我的想法:
    首先,官方提供的,就应该是可用的,不应该类型不同 性能 相差很多。
    也就是说不管那种存储引擎,太垃圾的就别提供,或者是mysql开发团队在家优化好了再拿出来。
    那么,我觉得没有必要太考虑char 还是vchar,的性能。相差应该不太多。
    而是从他们的功能区别,来区分使用。
      

  3.   


    跟你的数据长度分布情况有关。
    e.g. char(100), varchar(100)
    如果你的数据的实际长度总是在95或95以上,那么拿char(100),每个列最多浪费5个字符,不算多,却可以得到很好的存储性能。
    但是如果你的数据长度可变范围如果很大,从1个字符到100个字符都有可能,而且有很多都是70个字符以下的,那就不值得使用char(100)了。这只是打个比方。
      

  4.   

     MyISAM表的存储格式:
    静态格式是MyISAM表的默认存储格式。当表不包含变量长度列(VARCHAR, BLOB, 或TEXT)时,使用这个格式。每一行用固定字节数存储。
    我觉得还有跟索引有关系:
    INNODB和MYISAM的索引不一样,MYISAM索引包括了可以直接定位到数据行的指针信息.要是数据行的存储空间一定的话,可以直接根据此来更快的定位信息;