科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Mysql入门系列:MYSQL创建、删除、索引和更改表12

Mysql入门系列:MYSQL创建、删除、索引和更改表12

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Mysql入门系列:MYSQL创建、删除、索引和更改表

作者:ddvip 来源:ddvip 2009年12月23日

关键字: Schema PHP MySQL

  • 评论
  • 分享微博
  • 分享邮件

Mysql入门系列:MYSQL创建、删除、索引和更改表12

 

  

  对于3 . 2 3以前的MySQL版本,所连接的列必须是同样类型的这一点很重要,否则索引不能用于比较。对于版本3.23 或以上的版本,索引可用于不同的类型,但如果类型相同,查询仍然更快。

  ■ 将表从可变长行转换为定长行。假如有一个表chartbl 具有VARCHAR 列,想要把它转换为CHAR 列,看看能够得到什么样的性能改善。(定长行的表一般比变长行的表处理更快。)这个表如下创建:

  

  这里的问题是需要在相同的ALTER TABLE 语句中一次更改所有的列。不可能一次一列地改完,或者说这个企图将不起作用。如果执行DESCRIBE chartbl,会发现两个列仍然是VARCHAR 的列!原因是如果每次更改一列, MySQL注意到表仍然包含有可变长的列,则会把已经更改过的列重新转换为VARCHAR 以节省空间。为了处理这个问题,应该同时更改所有VARCHAR 列:

  

  现在DESCRIBE 将显示该表包含的都是CHAR 列。确实,这种类型的操作很重要,因为它使ALTER TABLE 能在相同的语句中支持多个动作。

  这里要注意,在希望转换这样的表时:如果表中存在BLOB 或TEXT 列将使转换表为定长行格式的企图失败。即使表中只有一个可变长的列都将会使表有可变长的行,因为这些可变长的列类型没有定长的等价物。

  ■ 将表从定长行转换为可变长的行。虽然, chartbl 用定长行更快,但它要占用更多的空间,因此决定将它转换回原来的形式以节省空间。这种转换更为容易。只需将某个CHAR 列转换为VARCHAR 列,MySQL就自动地转换其他的CHAR 列。要想转换chartbl 表,用下列任一条语句都可以:

  

  ■ 转换表的类型。如果从MySQL3.23 版以前的版本升级到3.23 版或更高,那么可能会有一些原来创建为ISAM 表的旧表。如果希望使它们为MyISAM 格式,如下操作:

  

  为什么要这样做呢?正如在“创建和删除索引”小节中所介绍的那样,一个原因是MyISAM 存储格式具有某些ISAM 格式没有的索引特性,例如能够对NULL 值、BLOB 和TEXT 列类型进行索引。另一个原因为, MyISAM 表是独立于机器的,因此可通过将它们直接拷贝来将它们移到其他机器上,即使那些机器具有不同的硬件体系结构也同样。这在第11章中将要作进一步的介绍。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章