MySQL中有哪些列类型

74次阅读
没有评论

共计 1971 个字符,预计需要花费 5 分钟才能阅读完成。

MySQL 中有哪些列类型,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

MySQL 列类型选择和查询效率有怎样的联系

■使用定长列,不使用可变长列。这条准则对被经常修改,从而容易产生碎片的表来说特别重要。例如,应该选择 CHAR 列而不选择 VARCHAR 列。所要权衡的是使用定长列时,表所占用的空间更多,但如果能够承担这种空间的耗费,使用定长行将比使用可变长的行处理快得多。

■在较短的列能够满足要求时不要使用较长的列。如果正使用的是定长的 CHAR 列,应该使它们尽量短。如果列中所存储的最长值为 40 个字符,那么就不要将其定义为 CHAR(255); 只要定义为 CHAR(40)即可。如果能够使用 MEDIUMINT 而不是 BIGINT,表将会更小(磁盘 I / O 也较少),其值在计算中也可以处理得更快。

■将列定义为 NOTNULL。这样处理更快,所需空间更少。而且有时还能简化查询,因为不需要检查是否存在特例 NULL。

■考虑使用 ENUM 列。如果有一个只含有限数目的特定值的列,那么应该考虑将其转换为 ENUM 列。ENUM 列的值可以更快地处理,因为它们在内部是以数值表示的。

■使用 PROCEDUREANALYSE()。如果使用的是 MySQL3.23 或更新的版本,应该执行 PROCEDUREANALYSE(),查看它所提供的关于表中列的信息:

相应输出中有一列是关于表中每列的最佳列类型的建议。第二个例子要求 PROCEDUREANALYSE()不要建议含有多于 16 个值或取多于 256 字节的 ENUM 类型 (可根据需要更改这些值)。如果没有这样的限制,输出可能会很长;ENUM 的定义也会很难阅读。根据 PROCEDUREANALYSE() 的输出,会发现可以对表进行更改以利用更有效的类型。如果希望更改值类型,使用 ALTERTABLE 语句即可。

MySQL 列类型选择和查询效率有怎样的联系

■将数据装入 BLOB。用 BLOB 存储应用程序中包装或未包装的数据,有可能使原来需要几个检索操作才能完成的数据检索得以在单个检索操作中完成。而且还对存储标准表结构不易表示的数据或随时间变化的数据有帮助。在第 3 章 ALTERTABLE 语句的介绍中,有一个例子处理存储来自 Web 问卷的结果的表。该例子中讨论了在问卷中增加问题时,怎样利用 ALTERTABLE 向该表追加列。

解决该问题的另一个方法是让处理 Web 的应用程序将数据包装成某种数据结构,然后将其插入单个 BLOB 列。这样会增加应用程序对数据进行解码的开销(而且从表中检索出记录后要对其进行编码),但是简化了表的结构,并且不用在更改问卷时对表进行更改。另一方面,BLOB 值也有自己的固有问题,特别是在进行大量的 DELETE 或 UPDATE 操作时更是如此。删除 BLOB 会在表中留下一个大空白,在以后将需用一个记录或可能是不同大小的多个记录来填充。

■对容易产生碎片的表使用 OPTIMIZETABLE。大量进行修改的表,特别是那些含有可变长列的表,容易产生碎片。碎片不好,因为它在存储表的磁盘块中产生不使用的空间。随着时间的增长,必须读取更多的块才能取到有效的行,从而降低了性能。任意具有可变长行的表都存在这个问题,但这个问题对 BLOB 列更为突出,因为它们尺寸的变化非常大。经常使用 OPTIMIZETABLE 有助于保持性能不下降。

■使用合成索引。合成索引列有时很有用。一种技术是根据其他列建立一个散列值,并将其存储在一个独立的列中,然后可通过搜索散列值找到行。这只对精确匹配的查询有效。(散列值对具有诸如“”或“=”这样的操作符的范围搜索没有用处)。在 MySQL3.23 版及以上版本中,散列值可利用 MD5()函数产生。散列索引对 BLOB 列特别有用。有一事要注意,在 MySQL3.23.2 以前的版本中,不能索引 BLOB 类型。甚至是在 3.23.2 或更新的版本中,利用散列值作为标识值来查找 BLOB 值也比搜索 BLOB 列本身更快。

■除非有必要,否则应避免检索较大的 BLOB 或 TEXT 值。例如,除非肯定 WHERE 子句能够将结果恰好限制在所想要的行上,否则 SELECT* 查询不是一个好办法。这样做可能会将非常大的 BLOB 值无目的地从网络上拖过来。这是存储在另一列中的 BLOB 标识信息很有用的另一种情形。可以搜索该列以确定想要的行,然后从限定的行中检索 BLOB 值。

■将 BLOB 值隔离在一个独立的表中。在某些情况下,将 BLOB 列从表中移出放入另一个副表可能具有一定的意义,条件是移出 BLOB 列后可将表转换为定长行格式。这样会减少主表中的碎片,而且能利用定长行的性能优势。

看完上述内容,你们掌握 MySQL 中有哪些列类型的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注丸趣 TV 行业资讯频道,感谢各位的阅读!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-03发表,共计1971字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)