`
风雪涟漪
  • 浏览: 507242 次
  • 性别: Icon_minigender_1
  • 来自: 大连->北京
博客专栏
952ab666-b589-3ca9-8be6-3772bb8d36d4
搜索引擎基础(Search...
浏览量:9013
Ae468720-c1b2-3218-bad0-65e2f3d5477e
SEO策略
浏览量:18416
社区版块
存档分类
最新评论

Schema的优化和索引 - 选择最佳的数据类型 - 前言

阅读更多

 

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.这些仅仅是别名。它们可能造成一些困惑,但是不会影响性能。

10
0
分享到:
评论
1 楼 whaosoft 2009-06-28  
     

相关推荐

    MYSQL5.7官方文档-5.7

    每一部分都详细解释了相关的概念、命令、配置选项和最佳实践。 **版本更新:** 对于每个版本的变更详情,可以查看MySQL 5.7的发布说明,其中列出了新特性、修复的bug和已知问题。 **法律信息:** 文档的前言和法律...

    mstr项目设计mstr项目设计

    - 在性能优化和数据完整性之间找到最佳平衡点。 **4.7 商业情境:创建物理框架(Schema)** - 通过实例展示如何将逻辑数据模型转化为物理数据仓库框架。 #### 五、高级数据建模和框架(Schema)设计 **5.1 课程目标**...

    高性能MySQL(第3版).part2

    第4章Schema与数据类型优化111 4.1选择优化的数据类型111 4.1.1整数类型113 4.1.2实数类型113 4.1.3字符串类型114 4.1.4日期和时间类型121 4.1.5位数据类型123 4.1.6选择标识符(identifier)125 4.1.7特殊...

    MySQL5.1性能调优与架构设计.mobi

    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 小结 第...

    Microsoft SQL Server 2005技术内幕: T-SQ程序设计.pdf

    从1999年开始,他一直是Microsoft SQL Server MVP(最有价值专家),并在全世界已经开展过无数次T-SQL查询、T-SQL优化和编程方面的培训。Itzik是Microsoft SQL Server方面几本著作的作者。他在SQL ServerMagazine和...

    OceanBase静态数据生成工具使用文档.docx

    - `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_中文帮助文档api完整版

    无论是从简单的实体映射到复杂的关联关系管理,还是从查询优化到性能调优,Hibernate Annotations都展现出了其强大的功能和灵活性。对于开发者来说,熟练掌握这些知识点能够极大地提高开发效率,降低维护成本。

    AWSDynamoDB数据实时迁移TcaplusDB解决方案.docx

    3. **索引**:DynamoDB支持全局索引和局部索引,而目前TcaplusDB暂不支持同步DynamoDB的全局索引和局部索引数据。未来随着TcaplusDB分布式索引功能的上线,将能更好地支持这一点。 #### 3. 迁移准备 ##### 3.1 ...

    mysql-refman-5.7-en.pdf

    此外,改进的查询优化器和新的性能分析工具,如Performance Schema,有助于开发者和DBA更好地理解和优化数据库性能。 总的来说,MySQL 5.7参考手册是学习和掌握MySQL 5.7及其相关NDB集群版本的重要资源,无论你是...

    MySQL 5.1官方简体中文参考手册

    前言 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....

    Oracle数据库管理员技术指南

    _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 ...

    DB2使用经验积累及心得

    - **SQLSP及CSP的选择**:根据需求选择存储过程类型。 - **查询的优化(HASH及RR_TO_RS)**:合理利用索引,考虑查询计划。 - **避免使用COUNT(*)及EXISTS的方法**:优化查询效率。 - **COMMIT的次数要适当**:频繁...

    MySQL5.1参考手册官方简体中文版

    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. ...

    OracleXML开发手册

    1. **XML 数据类型**:Oracle 提供了内置的 XML 数据类型,如 XMLType,允许将 XML 文档存储为数据库表的列。这使得 SQL 查询可以直接作用于 XML 数据,并进行验证、索引和查询优化。 2. **XML 存储方案**:Oracle ...

    mysql8.0英文原版帮助文档

    1. **增强的数据类型和函数**:MySQL 8.0引入了新的数据类型如JSON,增强了对时间和日期类型的处理,以及扩展了数学和字符串函数,提供了更丰富的操作能力。 2. **窗口函数**:这是SQL标准的一部分,允许在结果集中...

    MySQL 5.1参考手册

    添加和删除InnoDB数据和日志文件 15.2.8. InnoDB数据库的备份和恢复 15.2.9. 将InnoDB数据库移到另一台机器上 15.2.10. InnoDB事务模型和锁定 15.2.11. InnoDB性能调节提示 15.2.12. 多版本的实施 15.2.13. 表和...

    hibernate 中文注解

    - **类型:** `@Type`注解用于指定自定义的数据类型转换器。 - **索引:** `@Index`注解用于定义索引。 - **@Parent:** 用于关联映射。 - **生成的属性:** 使用`@Generated`注解生成属性值。 - **继承:** `@...

    SQL语言艺术

    函数和类型转换对索引的影响 索引与外键 同一字段,多个索引 系统生成键 索引访问的不同特点 4 机动灵活:思考SQL语句 SQL的本质 掌握SQL艺术的五大要素 过滤 5 了如指掌:理解物理实现 物理结构的类型 冲突的目标 ...

Global site tag (gtag.js) - Google Analytics