`
liulanghan110
  • 浏览: 1078164 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

合理创建索引

阅读更多

数据库索引的原理非常简单,但在复杂的表中真正能正确使用索引的人很少,即使是专业的DBA 也不一定能完全做到最优。

索引会大大增加表记录的DML(INSERT,UPDATE,DELETE) 开销,正确的索引可以让性能提升1001000 倍以上,不合理的索引也可能会让性能下降100 倍,因此在一个表中创建什么样的索引需要平衡各种业务需求。

索引有哪些种类?

常见的索引有B-TREE 索引、位图索引、全文索引,位图索引一般用于数据仓库应用,全文索引由于使用较少,这里不深入介绍。B-TREE 索引包括很多扩展类型,如组合索引、反向索引、函数索引等等,以下是B-TREE 索引的简单介绍:

B-TREE 索引也称为平衡树索引(Balance Tree) ,它是一种按字段排好序的树形目录结构,主要用于提升查询性能和唯一约束支持。B-TREE 索引的内容包括根节点、分支节点、叶子节点。

叶子节点内容: 索引字段内容+ 表记录ROWID

根节点,分支节点内容: 当一个数据块中不能放下所有索引字段数据时,就会形成树形的根节点或分支节点,根节点与分支节点保存了索引树的顺序及各层级间的引用关系。

 

在什么字段上建索引?

建立必要的索引

    总纲只有一句话:建立必要的索引,这就是后面内容基础。这点看似容易实际却很难。难就难在如何判断哪些索引足必要的,哪些又是不必要的。判断的最终标准是看这些索引是否对我们的数据库性能有所帮助。具体到方法上,就必须熟悉数据库应用程序巾的所有SQL 语句,从中统计出常用的能对性能有影响的部分SQL ,分析、归纳出作为Where 条件子句的字段及其组合方式:在这一基础上可以初步判断出哪些表的哪些宁段应该建立索引。其次,必须熟悉应用程序。必须了解哪些表足数据操作频繁的表:哪些表经常与其他表进行连接;哪些表的数据可能很大;对于数据是大的表,其巾各个字段的数据分布情况如何;等等。对于满足以上条件的这些表,必须重点关注,因为在这些表上的索引,将对SQL 语句的性能产生举足轻重的影响。建立索引常用的规则如下:

    1 、表的主键、外键必须有索引:

    2 、数据最超过300 的表应该有索引:

    3 、经常与其他表进行连接的表,在连接字段上应该建立索引;

    4 、经常出现在Where 子句中的字段,特别是大表的字段,应该建立索引;

    5 、索引应该建在选择性高的字段上;通过字段条件可筛选的记录集很小

    6 、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引:

    7 、复合索引的建立需要进行仔细分析:尽最考虑用单字段索引代替:

    8 、频繁进行数据操作的表,不要建立太多的索引

以下是一些字段是否需要建B-TREE 索引的经验分类:

1 需要建索引的字段

主键、外键和有对象或身份表示意义的字段,如 CODE,USERNAME

2 、索引慎用字段, 需要进行数据分布及使用场景详细评估

日期、年月、状态标志、类型、区域(COUNTRY,PROVINCE,CITY) 、操作人员(CREATOR,AUDITOR) 、数值(SCORE) 、长字符(ADDRESS)

3 、不适合建索引的字段

描述备注(: MEMO) 、大字段( 如:FILE_CONTENT)

索引对DML(INSERT,UPDATE,DELETE) 附加的开销

这个没有固定的比例,与每个表记录的大小及索引字段大小密切相关,以下是一个普通表测试数据,仅供参考:

索引对于Insert 性能降低56%

索引对于Update 性能降低47%

索引对于Delete 性能降低29%

因此对于写IO 压力比较大的系统,表的索引需要仔细评估必要性,另外索引也会占用一定的存储空间。

 

 

 

 

 

分享到:
评论
2 楼 liulanghan110 2011-04-27  
zc741520 写道
"数据最超过300的表应该有索引"  

300条这么少就需要建立索引???


300条建索引有什么不好么?
1 楼 zc741520 2011-04-26  
"数据最超过300的表应该有索引"  

300条这么少就需要建立索引???

相关推荐

    Oracle创建索引要做到三个适当.doc

    在Oracle数据库管理中,合理创建索引是一项至关重要的任务,它直接影响着数据库的查询性能和整体效率。然而,创建索引并非简单的操作,而是一项需要深入理解和精心规划的工作。正如文档标题“Oracle创建索引要做到三...

    数据库索引的优缺点及其附加资料

    ### 如何合理创建索引 在决定是否为某列创建索引时,需要综合考虑以下几点: - **频繁查询的列**:在查询中频繁使用的列上创建索引可以显著提高查询速度。 - **主键列**:在主键列上创建唯一性索引,以保证数据的...

    sql server创建索引

    在SQL Server中,创建索引是一项关键的数据库优化技术,旨在加速数据检索速度,提高查询性能。本文将深入探讨如何在SQL Server中创建索引,包括理解不同类型的索引、索引的创建语法以及如何利用索引提升数据库性能。...

    创建索引的作用利弊

    ### 创建索引的作用及其利弊分析 在数据库管理与优化领域,索引是提升查询效率的重要工具之一。本文将从创建索引的作用出发,详细探讨其背后的技术原理、实际应用场景以及可能带来的利弊。 #### 一、索引的基本...

    [Oracle]如何在亿级记录表中创建索引

    ### Oracle中亿级记录表创建索引的知识点详解 #### 一、背景介绍 在Oracle数据库中处理亿级数据量的表时,合理的索引设计是优化查询性能的关键因素之一。索引能够加快数据检索的速度,减少I/O操作次数,但同时也...

    Oracle 创建索引的基本规则

    ### Oracle 创建索引的基本规则 在Oracle数据库管理中,创建合适的索引对于提高查询效率、减少数据处理时间具有重要作用。本文将围绕Oracle创建索引的基本规则进行深入探讨,旨在帮助读者更好地理解如何根据不同的...

    MySQL创建索引,查看以及删除

    一、创建索引 在MySQL中,索引主要分为以下几种类型: 1. 主键索引(Primary Key Index):每个表只能有一个主键,不允许有重复值,且不能为NULL。 2. 唯一索引(Unique Index):与主键类似,唯一索引也确保列中...

    索引优化优化优化优化索引优化优化优化优化

    针对特定的SQL语句,合理创建索引能够极大地提升查询效率。以下是一些实用的策略: 1. **确定关键字段**:基于SQL语句的分析结果,确定哪些字段是查询中最常使用的,这些字段通常是建立索引的最佳选择。例如,案例...

    MYSQL索引知识

    MySQL索引知识是数据库管理中至关重要的一部分,它能显著提高数据查询的速度,特别是...在设计数据库时,应根据实际需求和数据特性合理创建索引,以平衡查询速度与维护成本。记住,索引不是越多越好,而是要恰到好处。

    MySQL索引检查.docx

    在设计数据库时,应合理创建索引,平衡查询性能与存储成本。对于经常出现在WHERE子句中的列,尤其是作为过滤条件的列,应该优先考虑创建索引。同时,使用`EXPLAIN`关键字来分析SQL查询的执行计划,可以帮助我们了解...

    合理创建和使用索引 提高Oracle查询效率.pdf

    "合理创建和使用索引提高Oracle查询效率" 索引是Oracle数据库管理系统中的一种重要数据结构。它可以大大提高查询效率,减少I/O操作。索引可以是B+树索引、簇索引、散列簇索引、反序索引、位图索引和函数索引等多种...

    Java_索引解说,Java_索引解说,Java_索引解说,Java_索引解说

    在设计数据库时,合理创建索引可以显著提升查询性能。然而,过多的索引会增加存储空间需求,同时在插入、删除和更新数据时可能会降低性能。因此,应根据应用的需求和数据操作的频率来决定何时以及如何创建索引。 ...

    lucene索引优化多线程多目录创建索引

    本教程主要探讨的是如何利用Lucene进行索引优化,特别是通过多线程和处理多个目录来提高索引创建效率。 首先,我们需要理解Lucene的索引原理。Lucene将文档分解为词项(tokens),并对每个词项创建倒排索引。倒排...

    合理使用索引技巧

    总结起来,合理使用索引技巧包括选择合适的列创建索引、优化查询语句结构、理解索引的局限性和使用数据库提供的工具来监控和调整索引。这不仅能够提高查询速度,还能减少数据库的总体资源消耗,从而优化整个系统的...

    oracle、sql数据库批量建索引

    对于Oracle数据库,批量创建索引可以通过SQL命令或者PL/SQL脚本来实现。例如,你可以使用`CREATE INDEX`语句来创建单个索引,然后通过循环结构批量处理多个索引。如果需要删除索引,可以使用`DROP INDEX`语句。为了...

    提高查询效率的oracle索引优化策略探析.pdf

    1. **合理创建索引**:Btree索引是最常见的类型,适用于1到32个字段的索引。复合索引在单字段索引效率较低时才有价值,但频繁更新的表应谨慎使用,因为它们可能降低写操作性能。 2. **避免全表扫描**:使用函数索引...

    数据库优化查询总结,主要是sql语句

    1. **合理创建索引**:在Oracle等关系型数据库环境中,虽然索引的使用是由系统自动管理的,但是索引的设计对于查询性能有着至关重要的影响。合理的索引设计可以显著提升查询效率。以下是一些创建索引的原则: - 当...

    Oracle索引的访问方法,如何创建索引、查询索引、使用索引

    Oracle索引的访问方法和创建索引的知识点 ...Oracle索引的访问方法和创建索引是数据库优化技术中非常重要的一部分,通过合理地创建和使用索引,可以提高查询速度和数据检索效率,从而提高数据库的性能和可靠性。

    SuperMap Objects Java 6R创建字段索引

    当我们在某个字段上创建索引时,数据库管理系统会构建一个指向该字段值的指针列表,这使得搜索该字段的值变得非常迅速。对于SuperMap Objects Java 6R而言,这个原理同样适用,特别是在处理大量空间和属性数据时,...

    创建索引对SQL语句执行的影响.doc

    在SQL数据库管理中,索引是一种重要的数据结构,它的创建对SQL语句的执行效率有着显著的影响...在实际应用中,应根据数据量、查询模式、业务需求以及资源限制,权衡利弊,合理创建和使用索引,以实现最佳的数据库性能。

Global site tag (gtag.js) - Google Analytics