索引

    数据库性能优化的基本原则就是:通过尽可能少的磁盘访问获得所需要的数据。要评价数据库的性能,需要在数据库调节前后比较其评价指标:响应时间和吞吐量之间的权衡、数据库的可用性、数据库的缓冲区命中率以及内存的使用效率,以此来衡量调节措施的效果和指导调整的方向。

  索引的建立

     在数据库操作中应用最广泛的是查询操作,而对查询最有效的优化是利用索引机制。一个查询在使用索引时,不用对全表的所有数据进行扫描就可以得到想要的数据。

在一个基本表上最多只能建立一个聚簇索引,该表的其它索引都是二级索引,由它们只能检索到聚簇索引的键,必须再查聚簇索引才能得到实际记录。因此,这些二级索引的效率比聚簇索引要低。如果在一个连接或选择操作中有多个索引可供选择,索引的最优选择规则有三条:一是布尔表达式类型、等值条件优先级最高;二是比较索引类型,聚簇索引和单值索引优先,然后才是一般索引;三是比较索引的数据类型,整型高于字符型,字符型又高于精确数。三条规则的优先级依次降低。

     值得注意的是,一个表上的索引能够优化其查询效率,但同时也可能会给其修改操作(包括插入、删除和更新)带来负面的影响,建立的索引越多、越复杂(包括索引的列数及列的数据类型) 这个负面的影响可能越大。通常情况下,最快的查询操作往往会导致最慢的更新操作,反之亦然。

    基于以上的介绍,用户在利用索引机制时,需要考虑以下几个问题:

    (1)明确应用的特征。用户首先需要对应用进行分析,并确定其关键事务,一旦确定关键事务,即可以分析其修改数据和查询数据的频率并决定是否建立相应的索引,如果两者相当,就要以其中一个操作的性能降低为代价去调整另一个操作。例如,数据仓库环境经常进行数据查询而很少进行数据更新,在这种情况下,有必要使用大量索引。另一方面,如果对更新操作的要求更关键,例如 OLTP 环境,则索引的数量就要少。

    (2)考察查询返回结果的大小。当对一个表进行查询时,返回表中的行数占全表总行数越小,利用索引所带来的优化效果就越明显。如果返回的行数与总行数接近,利用索引并不会有显著的效果。当需要进行全表查询时,索引甚至可能毫无用处。一般情况下,当返回行数占总行数的 25%以下时就应考虑对相应字段建立索引。

    (3)窄索引比宽索引更有效。在这里,窄索引指的是具有更简单数据类型、更少的索引列的索引。对于窄索引,索引树的层次更少,并且每个索引节点可以包含更多的信息,这样的索引树的搜索性能更高。另外,使用多个窄索引还可以给查询优化器提供更多的形式进行选择。

    (4)小心使用复合索引。复合索引指的是由多个字段构成的索引。在使用复合索引时,需要注意查询语句的 WHERE 子句必须包含复合索引的第一个字段或包含第一个字段在内的多个字段。

    一个表通常都存在多个字段。当用户考虑在一个表上建立索引时,对字段的选择通常需要根据查询的特征来决定。一般情况下,应用建立索引的字段通常有以下特点:

    A. WHERE 子句中出现频繁的字段

    B. 最大值或最小值常被查询的字段

    C. 在多个表间的连接时经常出现的字段

    D. 过滤性好的字段(即满足字段上设置的条件的记录数很少的字段)

不应建立的字段通常有以下的特点:

    A. 唯一值个数很少的字段(如字段’性别’一般只有“男”“女”两个取值)

    B. 不应对小表(记录数少的表)的字段建立索引;

    C. 不应对经常修改的字段建立索引。

原文地址:https://www.cnblogs.com/kingge/p/2310205.html