WEB开发网
开发学院数据库MySQL Mysql入门系列:选择MYSQL列的类型 阅读

Mysql入门系列:选择MYSQL列的类型

 2006-12-31 10:47:37 来源:WEB开发网   
核心提示: 3. 定长与可变长类型定长类型一般比可变长类型处理得更快:■ 对于可变长列,由于记录大小不同,Mysql入门系列:选择MYSQL列的类型(9),在其上进行许多删除和更改将会使表中的碎片更多,需要定期运行OPTIMIZE TABLE 以保持性能,对于某个特殊的关键应用,可能会希望以定长和可变

3. 定长与可变长类型

定长类型一般比可变长类型处理得更快:

■ 对于可变长列,由于记录大小不同,在其上进行许多删除和更改将会使表中的碎片更多。需要定期运行OPTIMIZE TABLE 以保持性能。而定长列就没有这个问题。

■ 在出现表崩溃时,定长列的表易于重新构造,因为每个记录的开始位置是确定的。可变长列就没有这种便利。这不是一个与查询处理有关的性能问题,但它必定能加快表的修复过程。如果表中有可变长的列,将它们转换为定长列能够改进性能,因为定长记录易于处理。在试图这样做之前,应该考虑下列问题:

■ 使用定长列涉及某种折衷。它们更快,但占用的空间更多。CHAR(n) 类型列的每个值总要占用n 个字节(即使空串也是如此),因为在表中存储时,值的长度不够将在右边补空格。而VARCHAR(N) 类型的列所占空间较少,因为只给它们分配存储每个值所需要的空间,每个值再加一个字节用于记录其长度。因此,如果在CHAR 和VARCHAR列之间进行选择,需要对时间与空间作出折衷。如果速度是主要关心的因素,则利用CHAR 列来取得定长列的性能优势。如果空间是关键,应该使用VARCHAR 列。

■ 不能只转换一个可变长列;必须对它们全部进行转换。而且必须使用一个ALTE RTABLE 语句同时全部转换,否则转换将不起作用。

■ 有时不能使用定长类型,即使想这样做也不行。例如对于比255 字符长的串,没有定长类型。

4. 可索引类型

索引能加快查询速度,因此,应该选择可索引的类型。

5. NULL 与NOT NULL 类型

如果定义一列为NOT NULL,其处理更快,因为MySQL在查询处理中不必检查该列的值弄清它是否为NULL,表中每行还能节省一位。避免列中有NULL 可以使查询更简单,因为不需要将NULL 作为一种特殊情形来考虑。通常,查询越简单,处理就越快。所给出的性能准则有时是互相矛盾的。例如,根据MySQL能对行定位这一方面来说,包含CHAR 列的定长行比包含VARCHAR 列的可变长行处理快。但另一方面,它也将占用更多的空间,因此,会导致更多的磁盘活动。从这个观点来看, VARCHAR 可能会更快。作为一个经验规则,可假定定长列能改善性能,即使它占用更多的空间也如此。对于某个特殊的关键应用,可能会希望以定长和可变长两种方式实现一个表,并进行某些测试以决定哪种方式对您的特定应用来说更快。

上一页  4 5 6 7 8 9 10  下一页

Tags:Mysql 入门 系列

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接