MySQL支持大量的数据类型,以及选择存储数据正确的类型对于获取好的性能是决定性的。说一下简单的指导准侧会帮助你有个更好的选择,而不管它们的数据类型。
越小也就是越好的
一般来说,尽量选择小的数据类型足以符合你的存储和展现数据。越小的数据类型也常常是越快的,因为它们使用了较 少的硬盘空间,内存,CPU缓存。它们也需要更少的CPU处理周期。
要确定的是不要低估你要存储数值的范围,因为在你的Schema的多个位置中,增长的数据类型范围会让操作很费力费 时。如果你对不知道选择什么样的数据类型,那么就选择一个最小的,当然要确保数据不会越界。
简单的就是好的
对于简单数据类型的操作,不需要太多的CPU周期。比如,整型之间的比较要比字符之间的比较消耗更低。因为字符集 和排序规则使字符的比较过于的复杂。这有两个例子,存储日期和时间要使用MySQL内置类型而不是用字符串,以及 对于IP地址你应该使用整型。我们会将在以后的章节详细讨论。
如果可能,要避免使用NULL
当可能的时候,你都应该定义字段为NOT NULL.有许多表包括了许多NULL的列,即使这些应用并不存储NULL。只不 过因为这是默认的。除非你打算存储NULL,不然的话你就要小心指定列为NOT NULL.
对于MySQL,优化一些涉及到NULL列的语句是非常困难的,因为它们加索引,索引统计,以及值的比较都很复杂。一 个NULL列需要更多的存储空间以及在MySQL内部需要特殊处理。当一个NULL列被索引了,它的每个实体都需要额外 的字节,以及设置导致了在MyISAM中,定长的索引转为可变大小(variable-sized)的索引。
即使你需要在字段中不存储值,你也不要用NULL.考虑使用0,特殊的数值,或者空字符串来取代NULL.
把NULL列变为NOT NULL列性能的提高是很小的。因此不要改变已有的Schema,除非你能知道这样做会引起的问题。 然而,如果你计划索引列,如果可能的话,请避免使用NULL列。
第一步要决定指定列的适用类型,要大概知道属于哪一类的:数值,字符串,时间等等。这是比较直接的,但是我们提到有些特殊的情况下,选择数据类型并不是很直接的。
第二步选择具体的类型。许多MySQL数据类型保存相同的类型数据,但是它们存储的范围不同,允许的精度,或者它们需要的物理空间(或者硬盘和内存)。一些数据类型有特殊的行为或者属性。
举个例子,DATETIME和TIMESTAMP列能存储相同类型的数据:日期和时间,精度为秒。然而,TIMESTAMP只使用了一半的存储空间,以及有个自动更新的特性。在另一方面,它的值范围较小,以及有的时候这个特性成了一个障碍了。
我们讨论的都是基本类型。MySQL也兼容别名,比如INTEGER,BOOL以及NUMERIC.这些仅仅是别名。它们可能造成一些困惑,但是不会影响性能。
分享到:
相关推荐
每一部分都详细解释了相关的概念、命令、配置选项和最佳实践。 **版本更新:** 对于每个版本的变更详情,可以查看MySQL 5.7的发布说明,其中列出了新特性、修复的bug和已知问题。 **法律信息:** 文档的前言和法律...
- 在性能优化和数据完整性之间找到最佳平衡点。 **4.7 商业情境:创建物理框架(Schema)** - 通过实例展示如何将逻辑数据模型转化为物理数据仓库框架。 #### 五、高级数据建模和框架(Schema)设计 **5.1 课程目标**...
9.2 合适的数据类型 9.3 规范的对象命名 9.4 小结 第10章 MySQL Server性能优化 10.0 引言 10.1 MySQL安装优化 10.2 MySQL日志设置优化 10.3 Query Cache优化 10.4 MySQL Server其他常用优化 10.5 小结 第...
从1999年开始,他一直是Microsoft SQL Server MVP(最有价值专家),并在全世界已经开展过无数次T-SQL查询、T-SQL优化和编程方面的培训。Itzik是Microsoft SQL Server方面几本著作的作者。他在SQL ServerMagazine和...
- `columntype`: 字段的数据类型。 - `len`: 字段的最大长度。 示例: ``` [1001] #row_key_column_info='0','3','8' #row_key_column_info='2','0','1' #row_key_column_info='1','3','8' ``` 2. **列...
无论是从简单的实体映射到复杂的关联关系管理,还是从查询优化到性能调优,Hibernate Annotations都展现出了其强大的功能和灵活性。对于开发者来说,熟练掌握这些知识点能够极大地提高开发效率,降低维护成本。
3. **索引**:DynamoDB支持全局索引和局部索引,而目前TcaplusDB暂不支持同步DynamoDB的全局索引和局部索引数据。未来随着TcaplusDB分布式索引功能的上线,将能更好地支持这一点。 #### 3. 迁移准备 ##### 3.1 ...
此外,改进的查询优化器和新的性能分析工具,如Performance Schema,有助于开发者和DBA更好地理解和优化数据库性能。 总的来说,MySQL 5.7参考手册是学习和掌握MySQL 5.7及其相关NDB集群版本的重要资源,无论你是...
前言 1. 一般信息 1.1. 关于本手册 1.2. 本手册采用的惯例 1.3. MySQL AB概述 1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5....
_SCHEMA收集统计数据 8.9.2 使用 DBMS_UTILITY.ANALYZE _DATABASE 收集统计数据 8.9.3 使用 DBMS_STATS 收集性能统计 数据 8.10 优化环境 8.10.1 怎样优化 Net8/SQL*Net 8.10.2 监控并优化系统资源 8.11 ...
- **SQLSP及CSP的选择**:根据需求选择存储过程类型。 - **查询的优化(HASH及RR_TO_RS)**:合理利用索引,考虑查询计划。 - **避免使用COUNT(*)及EXISTS的方法**:优化查询效率。 - **COMMIT的次数要适当**:频繁...
7.2.9. MySQL如何优化LEFT JOIN和RIGHT JOIN 7.2.10. MySQL如何优化嵌套Join 7.2.11. MySQL如何简化外部联合 7.2.12. MySQL如何优化ORDER BY 7.2.13. MySQL如何优化GROUP BY 7.2.14. MySQL如何优化LIMIT 7.2.15. ...
1. **XML 数据类型**:Oracle 提供了内置的 XML 数据类型,如 XMLType,允许将 XML 文档存储为数据库表的列。这使得 SQL 查询可以直接作用于 XML 数据,并进行验证、索引和查询优化。 2. **XML 存储方案**:Oracle ...
1. **增强的数据类型和函数**:MySQL 8.0引入了新的数据类型如JSON,增强了对时间和日期类型的处理,以及扩展了数学和字符串函数,提供了更丰富的操作能力。 2. **窗口函数**:这是SQL标准的一部分,允许在结果集中...
添加和删除InnoDB数据和日志文件 15.2.8. InnoDB数据库的备份和恢复 15.2.9. 将InnoDB数据库移到另一台机器上 15.2.10. InnoDB事务模型和锁定 15.2.11. InnoDB性能调节提示 15.2.12. 多版本的实施 15.2.13. 表和...
- **类型:** `@Type`注解用于指定自定义的数据类型转换器。 - **索引:** `@Index`注解用于定义索引。 - **@Parent:** 用于关联映射。 - **生成的属性:** 使用`@Generated`注解生成属性值。 - **继承:** `@...
函数和类型转换对索引的影响 索引与外键 同一字段,多个索引 系统生成键 索引访问的不同特点 4 机动灵活:思考SQL语句 SQL的本质 掌握SQL艺术的五大要素 过滤 5 了如指掌:理解物理实现 物理结构的类型 冲突的目标 ...
- **标识符、关键字和类型**:讲解了Java中的标识符命名规则、关键字列表以及各种数据类型。 - **表达式与流控制**:覆盖了条件语句、循环结构等控制流程语句以及运算符的使用。 - **数组**:讨论了数组的定义、...