要选择有助于使查询执行更快的列,应遵循如下规则(这里,“BLOB 类型”应该理解为即包含B L O B也包含TEXT 类型):
使用定长列,不使用可变长列。这条准则对被经常修改,从而容易产生碎片的表来说特别重要。例如,应该选择CHAR 列而不选择VARCHAR 列。所要权衡的是使用定长列时,表所占用的空间更多,但如果能够承担这种空间的耗费,使用定长行将比使用可变长的行处理快得多。
在 较短的列能够满足要求时不要使用较长的列。如果正使用的是定长的CHAR 列,应该使它们尽量短。如果列中所存储的最长值为40 个字符,那么就不要将其定义为CHAR ( 2 5 5 );只要定义为CHAR(40) 即可。如果能够使用MEDIUMINT 而不是BIGINT,表将会更小(磁盘I/O 也较少),其值在计算中也可以处理得更快。
将列定义为NOT NULL。这样处理更快,所需空间更少。而且有时还能简化查询,因为不需要检查是否存在特例NULL。
考虑使用ENUM 列。如果有一个只含有限数目的特定值的列,那么应该考虑将其转换为ENUM 列。ENUM 列的值可以更快地处理,因为它们在内部是以数值表示的。
使用PROCEDURE ANALYSE( )。如果使用的是MySQL3.23 或更新的版本,应该执行PROCEDURE ANALYSE( ),查看它所提供的关于表中列的信息:
相应输出中有一列是关于表中每列的最佳列类型的 建议。第二个例子要求PROCEDURE ANALYSE( ) 不要建议含有多于16 个值或取多于256 字节的ENUM 类型(可根据需要更改这些值)。如果没有这样的限制,输出可能会很长;ENUM 的定义也会很难阅读。根据PROCEDURE ANALYSE( ) 的输出,会发现可以对表进行更改以利用更有效的类型。如果希望更改值类型,使用ALTER TABLE 语句即可。
将 数据装入B L O B。用BLOB 存储应用程序中包装或未包装的数据,有可能使原来需要几个检索操作才能完成的数据检索得以在单个检索操作中完成。而且还对存储标准表结构不易表示的数据或 随时间变化的数据有帮助。在第3 章ALTER TABLE 语句的介绍中,有一个例子处理存储来自Web 问卷的结果的表。该例子中讨论了在问卷中增加问题时,怎样利用ALTER TABLE 向该表追加列。
解 决该问题的另一个方法是让处理Web 的应用程序将数据包装成某种数据结构,然后将其插入单个BLOB 列。这样会增加应用程序对数据进行解码的开销(而且从表中检索出记录后要对其进行编码),但是简化了表的结构,并且不用在更改问卷时对表进行更改。另一方 面, BLOB 值也有自己的固有问题,特别是在进行大量的DELETE 或UPDATE 操作时更是如此。删除BLOB 会在表中留下一个大空白,在以后将需用一个记录或可能是不同大小的多个记录来填充。
对 容易产生碎片的表使用OPTIMIZE TABLE。大量进行修改的表,特别是那些含有可变长列的表,容易产生碎片。碎片不好,因为它在存储表的磁盘块中产生不使用的空间。随着时间的增长,必须 读取更多的块才能取到有效的行,从而降低了性能。任意具有可变长行的表都存在这个问题,但这个问题对BLOB 列更为突出,因为它们尺寸的变化非常大。经常使用OPTIMIZE TABLE 有助于保持性能不下降。
使用合成索引。合成索引列有时很有用。一种技术是根据其他列建立一个散列值,并将其存储在一个独立的列中,然后可通过搜索散列值找到行。这只对精确匹配的查询有效。(散列值对具有诸如“ <”或“ > =”这样的操作符的范围搜索没有用处)。在MySQL3.23版及以上版本中,散列值可利用MD5( ) 函数产生。散列索引对BLOB 列特别有用。有一事要注意,在MySQL3.23.2 以前的版本中,不能索引BLOB 类型。甚至是在3.23.2 或更新的版本中,利用散列值作为标识值来查找BLOB 值也比搜索BLOB 列本身更快。
除非有必要,否则应避免检索较大的BLOB 或TEXT 值。例如,除非肯定WHERE 子句能够将结果恰好限制在所想要的行上,否则SELECT * 查询不是一个好办法。这样做可能会将非常大的BLOB 值无目的地从网络上拖过来。这是存储在另一列中的BLOB 标识信息很有用的另一种情形。可以搜索该列以确定想要的行,然后从限定的行中检索BLOB 值。
将BLOB 值隔离在一个独立的表中。在某些情况下,将BLOB 列从表中移出放入另一个副表可能具有一定的意义,条件是移出BLOB 列后可将表转换为定长行格式。这样会减少主表中的碎片,而且能利用定长行的性能优势。
分享到:
相关推荐
在设计数据库表结构时,选择合适的字段类型至关重要,因为它直接影响到数据的存储效率、查询速度以及数据库的整体性能。合理地使用字段类型,可以有效节省存储空间,提高查询效率,并确保数据的准确性。在实际应用中...
Oracle_Mysql_Sqlserver字段类型转换参考Oracle_Mysql_Sqlserver字段类型转换参考Oracle_Mysql_Sqlserver字段类型转换参考Oracle_Mysql_Sqlserver字段类型转换参考Oracle_Mysql_Sqlserver字段类型转换参考Oracle_...
MySQL字段类型是数据库设计的基础,它决定了...在设计数据库时,选择合适的字段类型对于存储效率、查询性能以及数据的正确性都至关重要。理解各种类型的特性和适用场景,可以帮助我们创建更高效、更合理的数据库结构。
MySQL数据库在设计表结构时,选择正确的存储字段类型对于查询效率和存储空间的优化至关重要。以下是对标题和描述中提到的知识点的详细说明: 1. **整数类型**: - 整数类型包括TINYINT、SMALLINT、MEDIUMINT、INT...
MySQL是一种广泛使用的开源关系型数据库管理系统,其字段类型是数据库设计中的重要概念,它决定了数据存储的格式和特性。理解并正确选择字段类型对于优化数据库性能、节省存储空间以及确保数据准确性至关重要。以下...
MySQL 字段加密是将数据库字段类型设置为 varbinary 类型,并将加密盐设置为全局变量,以实现对敏感数据的保护。本文将详细介绍 MySQL 字段加密的实现步骤和相关知识点。 数据库字段类型 在 MySQL 中,将要加密的...
MySQL 字段类型的意义 -- 包含了 MySQL 所特有的字段及其意义
MySQL 字段类型及操作命令 MySQL 是一个关系型数据库管理系统,广泛应用于各种 web 应用程序中。 MySQL 中的字段类型是指数据库表中的每个字段可以存储的数据类型。了解 MySQL 的字段类型和基本操作命令是每个...
掌握 —— 不同数据类型的选择。 理解 —— MySQL支持的数据类型; 表的字段类型 MySQL支持的类型 MySQL支持多种类型,大致可以分为三类: 数值类型 日期和时间类型 字符串(字符)类型。 数值类型 表的字段类型 MySQL...
MySQL存储过程,一键批量修改一个表内的多个列(字段)类型。例如从int转换成varchar
### MySQL查询表中字段数量的方法 在MySQL数据库中,了解一个表包含多少个字段是非常重要的基础操作之一。这不仅有助于数据库管理员更好地管理数据结构,还能够帮助开发人员更准确地编写SQL查询语句。本文将详细...
本文旨在通过对比两种不同的MySQL递归树查询方式,分析它们的效率差异,帮助开发者选择更适合实际应用场景的方法。 #### 二、环境准备 为了确保测试结果的准确性,首先需要对MySQL数据库进行一定的配置调整: 1. ...
在MySQL数据库管理中,添加字段是一项常见的操作,用于在已有的数据表中增加新的列来扩展数据表的结构。这通常发生在数据需求发生变化或者需要记录更多相关信息时。本篇文章将详细探讨如何在MySQL中添加字段,以及...
4. 在软件界面中选择“MySQL字段注释生成”功能,程序将自动扫描并列出所有表。 5. 选择需要生成注释的表,点击生成按钮,注释将被写入到数据库的字段注释字段中。 四、注意事项 1. 替换dll时要谨慎,确保新dll与...
mysql中有种可以通过join相关操作进行表与表之间的方式查询不同结果集,但是在一对多的情况下,关键查询的结果是多条的.例如:班级和学习的关系,我想很直观的看到班级和学生的情况,列表显示出班级的信息和班级的男生...
在 MySQL 中,选择合适的字段类型对数据库的性能和数据存储效率具有重要影响。在本文中,我们将讨论 MySQL 中的时间类型,包括 DATE、TIME、DATETIME、TIMESTAMP 和 YEAR 等五种类型,并介绍各自的特点和应用场景。 ...
mysql查询包含某字段的所有表. 根据字段名称找出含有该字段的所有表。
mysql5.7以上具有json数据类型了,文档是学习使用JSON文档。