定义字段类型和长度的原则
1个回答
关注
展开全部
亲,为您查询到定义字段类型和长度的原则如下
1 更小的通常更好
一般情况下,应该尽量使用可以正确存储数据的最小数据类型。更小的数据 类型通常更快,因为它们占用更少的磁盘、内存和 CPU 缓存,并且处理时需要 的 CPU 周期也更少。 但是要确保没有低估需要存储的值的范围,因为在的多个地方增加数据类型 的范围是一个非常耗时和痛苦的操作。如果无法确定哪个数据类型是最好的,就 选择你认为不会超过范围的最小类型。
咨询记录 · 回答于2022-05-12
定义字段类型和长度的原则
亲,为您查询到定义字段类型和长度的原则如下1 更小的通常更好一般情况下,应该尽量使用可以正确存储数据的最小数据类型。更小的数据 类型通常更快,因为它们占用更少的磁盘、内存和 CPU 缓存,并且处理时需要 的 CPU 周期也更少。 但是要确保没有低估需要存储的值的范围,因为在的多个地方增加数据类型 的范围是一个非常耗时和痛苦的操作。如果无法确定哪个数据类型是最好的,就 选择你认为不会超过范围的最小类型。
简单就好简单数据类型的操作通常需要更少的 CPU 周期。例如,整型(int)比字符(vchar)操作代价更低,因为字符集和校对规则(排序规则)使字符比较比整型比较更复杂。再比如应该使用 MySQL 内建的类型(datetemp)而不是字符串来存储日期和时间。
尽量避免NULL(尤其是索引列)很多表都包含可为 NULL(空值)的列,即使应用程序并不需要保存 NULL 也是 如此,这是因为可为 NULL 是列的默认属性。通常情况下最好指定列为 NOT NULL, 除非真的需要存储 NULL 值。如果查询中包含可为 NULL 的列,对 MySQL 来说更难优化,因为可为 NULL 的列使得索引、索引统计和值比较都更复杂。可为 NULL 的列会使用更多的存储 空间,在 MySQL 里也需要特殊处理。当可为 NULL 的列被索引时,每个索引记录 需要一个额外的字节。通常把可为 NULL 的列改为 NOT NULL 带来的性能提升比较小,所以(调优 时)没有必要首先在现有 schema 中查找并修改掉这种情况,除非确定这会导致 问题。但是,如果计划在列上建索引,就应该尽量避免设计成可为 NULL 的列。
Int/整数类型存储整数,可以使用这几种整数类型:TINYINT,SMALLINT,MEDIUMINT,INT, BIGINT。分别使用 8,16,24,32,64 位存储空间,也就是 1、2、3、4、8 个字 节。同时整数类型有可选的 UNSIGNED 属性,表示不允许负值,这大致可以使 正数的上限提高一倍。例如 TINYINT UNSIGNED 可以存储的范围是 0~255,而 TINYINT 的存储范围是-128~127。有符号和无符号类型使用相同的存储空间,并具有相同的性能,因此可以根 据实际情况选择合适的类型。MySQL 可以为整数类型指定宽度,例如 INT(11),对大多数应用这是没有意 义的,它不会限制值的合法范围,只是规定了 MySQL 的一些交互工具(例如 MySQL命令行客户端)用来显示字符的个数。对于存储和计算来说,INT(1)和 INT(20)是相 同
实数(带小数)类型实数是带有小数部分的数字。MySQL 既支持精确类型的存储 DECIMAL 类型, 也支持不精确类型存储 FLOAT 和 DOUBLE 类型。DECIMAL 类型用于存储精确的小数,本质上 MySQL 是以字符串形式存放的。 所以 CPU 不支持对 DECIMAL 的直接计算,所以在 MySQL 中自身实现了 DECIMAL 的高精度计算。相对而言,CPU 直接支持原生浮点计算,所以浮点运算明显更快。浮点和 DECIMAL 类型都可以指定精度。对于 DECIMAL 列,可以指定小数点前后所允许的最大位数。这会影响列的空间消耗。MySQL 5.0 和更高版本将数字打包保存到一个二进制字符串中(每 4 个字节存 9 个数字)。例如,DECIMAL(18,9) 小数点两边将各存储 9 个数字,一共使用 9 个字节:小数点前的数字用 4 个字节, 小数点后的数字用 4
字符串类型MysQL 支持多种字符串类型,包括 VARCHAR 和 CHAR 类型、BLOB 和 TEXT 类型、ENUM(枚举)和 SET 类型。VARCHARVARCHAR 类型用于存储可变长字符串,是最常见的字符串数据类型。它比 定长类型更节省空间,因为它仅使用必要的空间(例如,越短的字符串使用越少 的空间)。在内部实现上,既然是变长,VARCHAR 需要使用 1 或 2 个额外字节记录字符串的长度,如果列的最大长度小于或等于 255 字节,则只使用 1 个字节表示,否 则使用 2 个字节。 (注意,此处只是磁盘的)VARCHAR 节省了磁盘存储空间,所以对性能也有帮助。但是,由于行是变长的, 在 UPDATE 时新值比旧值长时,使行变得比原来更长,这就肯能导致需要做额外 的工作。如果一个行占用的空间增长,并且在页内没有更多的空间可以存储,在 这种情况下,MyISAM