`
pkuoliver
  • 浏览: 19393 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

海量数据处理专题(七)——数据库索引及优化

阅读更多

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。

数据库索引

什么是索引

  数据库索引好比是一本书前面的目录,能加快数据库的查询速度。
  例如这样一个查询:select * from table1 where id=44。如果没有索引,必须遍历整个表,直到ID等于44的这一行被找到为止;有了索引之后(必须是在ID这一列上建立的索引),直接在索引里面找44(也就是在ID这一列找),就可以得知这一行的位置,也就是找到了这一行。可见,索引是用来定位的。
  索引分为聚簇索引和非聚簇索引两种,聚簇索引 是按照数据存放的物理位置为顺序的,而非聚簇索引就不一样了;聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索很快。

概述

  建立索引的目的是加快对表中记录的查找或排序。
  为表设置索引要付出代价的:一是增加了数据库的存储空间,二是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)。

B树索引-Sql Server索引方式

B树索引-Sql Server索引方式

 

为什么要创建索引

  创建索引可以大大提高系统的性能。
    第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
    第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
    第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
    第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
    第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
  也许会有人要问:增加索引有如此多的优点,为什么不对表中的每一个列创建一个索引呢?因为,增加索引也有许多不利的方面。
    第一,创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
    第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
    第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

在哪建索引

  索引是建立在数据库表中的某些列的上面。在创建索引的时候,应该考虑在哪些列上可以创建索引,在哪些列上不能创建索引。一般来说,应该在这些列上创建索引:
  在经常需要搜索的列上,可以加快搜索的速度;
  在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;
  在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;
  在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;
  在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。
  同样,对于有些列不应该创建索引。一般来说,不应该创建索引的的这些列具有下列特点:
  第一,对于那些在查询中很少使用或者参考的列不应该创建索引。这是因为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。
  第二,对于那些只有很少数据值的列也不应该增加索引。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度。
  第三,对于那些定义为text, image和bit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少,不利于使用索引。
  第四,当修改性能远远大于检索性能时,不应该创建索引。这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因此,当修改操作远远多于检索操作时,不应该创建索引。

数据库优化

  此外,除了数据库索引之外,在LAMP结果如此流行的今天,数据库(尤其是MySQL)性能优化也是海量数据处理的一个热点。下面就结合自己的经验,聊一聊MySQL数据库优化的几个方面。
  首先,在数据库设计的时候,要能够充分的利用索引带来的性能提升,至于如何建立索引,建立什么样的索引,在哪些字段上建立索引,上面已经讲的很清楚了,这里不在赘述。另外就是设计数据库的原则就是尽可能少的进行数据库写操作(插入,更新,删除等),查询越简单越好。如下:

数据库设计

数据库设计


  其次,配置缓存是必不可少的,配置缓存可以有效的降低数据库查询读取次数,从而缓解数据库服务器压力,达到优化的目的,一定程度上来讲,这算是一个“围魏救赵”的办法。可配置的缓存包括索引缓存(key_buffer),排序缓存(sort_buffer),查询缓存(query_buffer),表描述符缓存(table_cache),如下图:

配置缓存

配置缓存


  第三,切表,切表也是一种比较流行的数据库优化方。。。。。。继续阅读:http://itmian.com/2011/08/17/mysql%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/

分享到:
评论

相关推荐

    让Oracle跑得更快2:基于海量数据的数据库设计与.pdf

    ### 一、海量数据处理 海量数据处理的核心在于高效的数据存储和快速的数据访问。对于Oracle数据库而言,这通常涉及到表空间设计、索引结构、分区策略以及数据压缩技术的应用。例如,合理地使用分区可以将大表分割成...

    海量数据库的查询优化及分页算法方案

    ### 海量数据库的查询优化及分页算法方案 在处理海量数据的环境中,数据库的查询优化和分页算法的设计显得尤为重要。本文将基于Oracle数据库,深入探讨如何优化查询性能以及实现高效的分页策略。 #### 标题解析:...

    建构信息时代的基石——数据库技术.pdf

    未来,数据库技术的发展趋势将更加注重云计算、大数据处理和实时分析。云数据库使得数据存储和处理更具弹性,能够根据需求动态扩展资源。大数据技术如Hadoop和Spark则提供了处理PB级数据的能力。实时分析技术,如流...

    数据仓库实践系列课程(1)——数据库基础与SQL.pptx

    掌握SQL是理解和操作数据仓库的关键,因为它能帮助用户有效地从海量数据中提取有价值的信息,支持业务决策和分析。 总的来说,数据仓库实践系列课程的首部分旨在让学习者理解数据库的基础概念,掌握SQL语言,从而...

    基于信息浓缩粒子滤波的分布式网络数据库优化索引.pdf

    为解决传统Web数据库索引在大规模分布式系统中的局限性,本文提出了一种创新的索引优化策略——基于信息浓缩粒子滤波的分布式网络数据库优化索引算法,旨在显著提升数据库的访问效率和数据管理能力。 分布式网络...

    性能调优——Oracle索引技术的应用与剖析

    在这个具体的案例中,政府职能部门需要通过身份证号码比对公民信息,这就涉及到如何高效地在海量数据中查找和更新信息,此时索引的作用就显得尤为突出。 首先,创建索引的目的是为了加速数据检索。在表TEDA_RYXX中...

    海量数据管理报告.zip

    通过分析提供的三个文档——“海量数据管理第一次上机.docx”、“海量数据管理第三次上机报告.docx”以及“海量数据管理第2次上机.docx”,我们可以揭示出一系列关于海量数据处理的关键知识点。 首先,海量数据管理...

    [原创]从数据仓库到数据湖——浅谈数据架构演进1

    这些数据具有高并发、实时性要求和复杂关联性,需要高效的数据处理和分析能力来支持网络优化、客户服务和市场洞察。 10. 演进路径实践 从数据仓库到数据湖的演进,企业通常会经历混合架构阶段,结合传统数据仓库的...

    云计算技术在计算机数据处理中的应用——评《云计算大数据处理》.pdf

    书中提到的数据立方技术,是云计算数据处理工具中的一种,它具有多维度、高效率的数据索引与分析特点,能够大幅度提升大数据处理的效率。通过实际案例,比如交通出行、供电信息采集、移动信令分析和地震数据采集与...

    应用分布式索引提高海量数据查询性能.pdf

    文章主要探讨了在电信领域精准化营销和即席查询业务中,如何应对海量数据查询的性能挑战,并着重介绍了一种新型处理模式——应用分布式索引层来提高查询性能。 首先,文章指出在传统的处理模式中,直接对数据库进行...

    100亿数据量1万属性数据库架构设计

    在处理100亿数据量、10万并发和1万属性的数据库架构设计时,首先需要面对的是海量数据和高并发读写带来的挑战。此外,考虑到任意字段都可能进行组合查询,这就要求数据库架构不仅要能够存储大量数据,还要能够快速...

    AI 数据库:将 AI 引入数据库,直接与您的数据库和数据集成 它允许培训和管理任何 AI 模型和 API,为用户提供更强大的数

    面对海量数据,SuperDuperDB能够快速地进行智能索引和查询优化,提高数据检索速度,减少计算资源的消耗。这对于实时数据分析、预测性维护以及异常检测等应用场景尤其重要。 安全性是数据库的另一大关注点。...

    数据库应用技术——SQL Server 2000简明教程电子教案

    10. 数据仓库与OLAP:SQL Server 2000还支持数据仓库构建和在线分析处理(OLAP),使得海量数据的分析和挖掘成为可能。 通过这个《SQL Server 2000简明教程》,学习者将全面掌握数据库设计、管理、查询和开发的技能...

    基于Cassandra的RatuDB设计源码,新一代分布式分析数据库系统

    该项目是中科睿途基于Cassandra核心研发的新一代分布式分析...RatuDB支持多种存储模式,包括结构化、非结构化、索引、图和向量数据库,通过优化Cassandra和OpenSearch,实现高性能的数据读写,适用于海量数据处理场景。

    数据库系统概念(中文第六版)

    3. **大数据处理**: 大数据处理涉及对海量数据进行高效存储、处理和分析的技术。常用的大数据处理框架包括Hadoop、Spark等。 #### 五、实现技术 1. **数据库管理系统(DBMS)**: DBMS是管理和控制数据库的软件系统,...

    淘宝海量数据产品技术架构.ppt

    【淘宝海量数据产品技术架构】主要探讨了在处理大规模电商数据时所面临的挑战以及相应的解决方案。淘宝作为中国最大的电商平台之一,...这样的架构设计为淘宝这样的大型电商平台提供了稳定、高效的海量数据处理能力。

    王珊 数据库 精品课程课件

    随着大数据时代的到来,分布式数据库成为了解决海量数据存储和处理的关键技术。课件会探讨分布式数据库的架构,如主从复制、分区策略以及NoSQL数据库的原理。同时,还会涉及大数据处理框架,如Hadoop和Spark,以及...

    云数据库十大经典案例

    云数据库作为互联网时代的核心技术之一,广泛应用于各类企业信息系统中,提供海量数据存储、高并发处理和弹性扩展等关键能力。在本文中,将通过阿里巴巴ApsaraDB专家服务组玄惭的十大云数据库经典案例,深入探讨云...

    基于Oracle和ArcSDE的空间数据访问优化

    在当前的信息时代,空间信息扮演着至关重要的角色,而Oracle数据库和ArcSDE作为地理信息系统(GIS)的核心组件,为管理和优化空间数据提供了强大支持。本文将深入探讨基于Oracle和ArcSDE的空间数据访问优化策略,以...

Global site tag (gtag.js) - Google Analytics