扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者