`
jiangduxi
  • 浏览: 444373 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

优化数据库对象

阅读更多
在数据库设计过程中,用户可能会经常会被一个问题缠绕:是否应该把所有表都按照第三范式来设计?表里面的字段到底该设置为多大长度合适?这些问题虽然小,但是如果设计不当则可能会给将来的应用带来很多的性能问题。

1. 优化表的数据类型
   表需要使用何种数据类型,是需要根据应用来判断的,虽然应用设计的时候需要考虑字段的长度留有一定的冗余,但是不赞成让很多字段都留有大量的冗余,这样既浪费磁盘存储空间,同时在应用程序操作时也浪费物理内存。

  在MySQL中,可以使用函数PROCEDUER ANALYSE()对当前应用的表进行分析,该函数可以对数据表中列的数据类型提出优化建议,用户可以根据实际情况酌情考虑是否进行优化。
引用

  SELECT * FROM table_name PROCEDUER ANALYSE();
  SELECT * FROM table_name PROCEDUER ANALYSE(16,256);

输出的每一列信息都会对数据表中的列的数据类型提出优化建议。以上第二句表示PROCEDUER ANALYSE()不要为那些包含的值大于16个或者256字节的ENUM类型提出建议。如果没有这样的限制,输出信息可能很长;ENUM定义通常很难阅读。

通过PROCEDUER ANALYSE()函数的输出信息,用户可能会发现,一些表中的字段可以修改为效率更高的数据类型。如果决定改变某个字段的类型,则需要使用ALTER TABLE语句。

2. 通过拆分提高表的访问效率
   这里所说的“拆分”,是指对数据表进行拆分。如果针对MyISAM类型的表进行,那么有两种拆分方法。
  2.1 第一种方法是垂直拆分,即把主码和一些列放到一个表,然后把主码和另外的列放到另一个表中。
引用

  如果一个表中某些列常用,而另外一些列不常用,则可以采用垂直拆分,另外垂直拆分可以使得数据行变小,一个数据页就能存放更多的数据,在查询时候就会减少I/O次数。其缺点是需要管理冗余列,查询所有数据需要联合(JOIN)操作。


  2.2 第二种方法是水平拆分,即根据一列或多列数据的值把数据列放到两个独立的表中。
引用

  水平拆分通常在以下几种情况下使用:
    a. 表很大,分割后可以降低在查询时需要读的数据和索引的页数,同时也降低了索引的层数,提高查询速度。
    b. 表中的数据本来就有独立性,例如,表中分别记录各个地区的数据或不同时期的数据,特别是有些数据常用,而另外一些不常用。
    c. 需要把数据存放到多个介质上。

   例如: 移动电话的账单表就可以分成两个或者多个表。最近3个月的账单数据存储在一个表中,3个月以前的历史账单存放在另外一个表中。超过1年的又可以存储在介质上。这种拆分是最常用使用的水平拆分方法。

  注意: 水平拆分会给应用增加复杂度,它通常在查询时需要多个表名,查询所有数据需要UNION操作。在许多数据库应用中,这种复杂性超过它带来的优点,因为只要索引关键字不大,则索引用于查询时,表中增加2至3倍的数据量,查询时也就增加读一个索引层的磁盘次数,所以拆分要考虑数据量的增长速度,根据实际情况决定是否需要对表进行水平拆分。


3. 使用中间表提高统计查询速度
  对于数据量较大的表,在其上进行统计查询通常效率很低,并且还要考虑统计查询是否会对在线的应用产生负面影响。通常在这种情况下,使用中间表可以提高统计查询的效率,
分享到:
评论

相关推荐

    oracle数据库的优化

    oracle数据库的优化 数据库的优化 2 概述 2 监控数据库的性能: 2 优化数据库磁盘I/O 2 建立和优化数据库文件的方针...优化数据库对象: 15 管理表的动态分配。 15 避免链接行。 错误!未定义书签。 优化索引存储参数。

    oracle数据库优化

    目录 1 数据库的优化 2 概述 2 监控数据库的性能: 2 优化数据库磁盘I/O 2 建立和优化数据库文件的方针: 6 ...优化数据库对象: 14 管理表的动态分配。 14 避免链接行。 错误!未定义书签。 优化索引存储参数。 14

    设计高性能数据库[优化数据库结构]

    数据库对象的部署 混合放置的缺点 在我们创建数据库的时候,一般来说用户数据库默认路径和系统数据库是放在一起的,这种部署方式有严重问题:假如有一个第三波书店的数据库,用户对它频繁访问,数据库所在的磁盘...

    MySQL技术内幕 SQL编程及优化.pdf

    3.优化数据库对象 3.1优化表的数据类型逆规范化 3.2提高查询速度 4.锁问题 4.1MyISQM表锁 4.2InnoDB锁问题 5.优化MySQL Server 5.1MySQL体系结构概览内存管理及优化 5.2InnoDB log机制及优化

    数据库设计与优化.pdf

    1.3.4 外键的设计 外键作为数据库对象,很多人认为麻烦而不用,实际上,外键在大部分情况下是很有用的,理由是: 外键是最高效的一致性维护方法,数据库的一致性要求,依次可以用外键、CHECK 约束、规则约束、...

    oracle 数据库优化技术资料

    为了使用基于成本的优化器(CBO, Cost-Based Optimizer) , 你必须经常运行analyze 命令,以增加数据库中的对象统计信息(object statistics)的准确性. 如果数据库的优化器模式设置为选择性(CHOOSE),那么实际的优化器...

    SQL Server 数据库技术---基础篇、数据库安全、SQL开发、数据库性能优化

    XML、使用ADO.NET、使用SMO编程管理数据库对象、高级T-SQL、Service Broker 异步应用程序平台、空间数据类型跨实例链接、数据库管理自动化、商务智能) 、数据库性能优化(数据库存储与索引、数据查询、事务处理...

    MySQL性能优化方案总结1

    1.SQL 和索引优化 2.优化数据库对象 3.针对存储引擎的优化 4.优化 MySQL server 5.磁盘 I/O 优化 6.应用优化

    oracle数据库管理与维护技术手册

    第七章 管理其他的数据库对象 第八章 管理表簇 第九章 管理用户和安全性 第十章 监控数据库的表、索引、簇、快照和对象 第十一章 监控用户和其他数据库对象 第十二章 Oracle的性能优化 第十三章 数据库的内部优化 第...

    SqlServer数据库性能优化详解

    为最有效地优化 Microsoft® SQL Server™ 2000 的性能,必须在极为多样化的情形中识别出会使性能提升最多的区域,并对这些区域集中分析。 虽然其它系统级性能问题(如内存、硬件等)也是研究对象,但经验表明从这些...

    数据库原理(第5版)

    第6章也讨论了分布式数据库和面向对象的数据库。 第7章介绍了使用基于Web的数据库处理,包括开放数据库连接(ODBC)和PHP脚本语言的使用。本章也讨论了可扩展标记语言(XML)的出现和基本概念。 第8章介绍了商业智能(BI)...

    浅谈数据库系统优化.docx

    浅谈数据库系统优化 概要:数据库系统的优化可以有效提高系统的性能,微软的SQL Server数据库的优化是一个系统工程,需要从设计开始就进入优化程序。 数据库的性能的优化成了数据处理的一个很重要环节。系统的性能...

    数据库基于三范式的优化

    从基本表设计、扩展设计和数据库表对象放置等角度进行讨论,着重讨论了如何避免磁盘I/O瓶颈和减少资源竞争,相信读者会一目了然

    Oracle数据库性能优化的艺术 (文平) 高清PDF扫描版

    《oracle数据库性能优化的艺术》是资深数据库专家、unix系统专家、系统架构师近20年工作经验的结晶。 《oracle数据库性能优化的艺术》内容高屋建瓴,用辩证法中的系统化分析方法,不仅从硬件(服务器系统、存储系统...

    分布式数据库试题及答案.doc

    1.5. 试述面向对象的数据库系统中页面服务器和对象服务器两种Client/Server体系结构的主要特点, 10 2. 九九年春季试题 10 2.1. DBMS解决了信息处理技术中的哪些挑战? 10 2.2. 在关系数据库应用设计中,为什么要对...

    大数据量数据库优化.

    项目中使用Hibernate进行大数据量的性能测试,有一些总结, 1) 在处理大数据量时,会有大量的数据缓冲保存在Session的一级... 4) 对含有关联的PO(持久化对象)时 5) 在一对多、多对一的关系中,使用延迟加载机制,

    数据库优化存储设计方案

    数据库优化存储设计方案本文首先讨论了基于第三范式的数据库表的基本设计,着重论述了建立主键和索引的策略和方案,然后从数据库表的扩展设计和库表对象的放置等角度概述了数据库管理系统的优化方案。

Global site tag (gtag.js) - Google Analytics