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

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 课程目标**...

    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 了如指掌:理解物理实现 物理结构的类型 冲突的目标 ...

    J2EE学习笔记(J2ee初学者必备手册)

    - **标识符、关键字和类型**:讲解了Java中的标识符命名规则、关键字列表以及各种数据类型。 - **表达式与流控制**:覆盖了条件语句、循环结构等控制流程语句以及运算符的使用。 - **数组**:讨论了数组的定义、...

Global site tag (gtag.js) - Google Analytics