1. 索引的概念

1.1 索引的优点

索引是表的一个或多个列的键值的有序列表,创建索引的原因有2个:

  • 确保一个或多个列中值的唯一性
  • 提高对表进行的查询的性能。当查询时想要以更快的速度找到所需要的列,或要以索引的顺序显示查询结果时,DB2优化器选择使用索引

2. 索引类型

2.1 唯一索引和非唯一索引

唯一索引:只允许列表中出现唯一一个键值

非唯一索引:允许重复的键值

2.2 群集索引

群集索引允许对数据页采用更线性的访问模式,允许更有效的预取,并且有助于避免排序。这意味着插入时间久,但查询操作会更快

使用群集索引时,应该考虑将数据页和索引页上的空闲空间增大为约15到35(而不是PCTFREE默认值10),以允许大容量的插入

群集索引的好处包括:

  • 在每个数据分区内,数据页以键的顺序排列
  • 群集索引改善了以键的顺序扫描整张表的性能。这是因为扫描访问第一页的第一行,然后访问同页上的每一行,在访存了该页上的所有行之后,才移至下一页。这样的好处是按照index来取数据时,磁头不会乱跑,从而提高了性能

3. 索引设计

3.1 创建索引注意事项

  • 不创建冗余索引
  • 确保创建的索引被引用
  • 考虑索引的维护成本
  • 需要考虑索引列的顺序

3.2 创建唯一性索引与非唯一性索引

CREATE INDEX <name>  ON <table_name> (<column_name>)

下面是按照EMPLOYEE表中的LASTNAME创建称为IND_LNAME并且按照升序排列的非唯一性索引

CREATE INDEX IND_LNAME ON EMPLOYEE(LASTNAME ASC)

下面是基于电话号码列创建唯一的索引

CREATE INDEX IND_TEL ON EMPLOYEE(PHONENO DESC)

3.3 创建群集索引

Tips :DB2表数据被删除时候,空间不会被释放,而是在原数据上加了一个delete标志,表示该行的空间可以使用,当需要向表中insert数据时,db2会扫描整个表空间,然后将新行置于可用的表空间,而如果指定了append on 属性,那么db2将不再搜索空闲表空间,而是把数据直接插入到表的最后,这样可以提高效率。这种适合于那些大批量追加的历史表,使用append on 属性后,注意定义reorg table

ALTER TABLE EMPLOYEE APPEND ON

新建群集索引

CREATE INDEX IND1_LNAME ON EMPLOYEE(LASTNAME) CLUSTER

但是上述两种不能同时存在

否则报错如下:

3.4 创建双向索引

CREATE INDEX IND_FIRNAME ON EMPLOYEE(FIRSTNME DESC) ALLOW REVERSE SCANS

在这种情况下,基于给定列FIRSTNME中的递减值形成索引。

4.完全索引访问

CREATE INDEX语句的INCLUDE字句指定在创建索引时,可以选择包含的附加列数据,这些附加的列数据将与索引存储在一起,但实际上这不是键本身的一部分,所以不被排序,在强制执行索引的唯一性时不考虑被包含的列。

例如执行如下查询:

SELECT EMPNO,FIRSTNME FROM EMPLOYEE

下面语句是创建一个提高性能的可能索引

CREATE UNIQUE INDEX IND_EMPNO ON EMPLOYEE(EMPNO) INCLUDE(FIRSTNME)

本质上,FIRSTNME数据是被复制存储的,数据被更新时,副本也会被更新,对数据库是很大的开销。

INCLUDE只能用在创建唯一性索引中

5.创建索引相关问题

1)如果能在一个合理的时间内结束查询,应避免添加索引,因为索引会降低更新操作的速度并占用额外的空间。

2)基数较大的列很适合用来作索引

3)考虑管理上的开销,应避免在索引中使用多余5个列

4)对于多列索引,将查询中引用最多的列放在定义的前面

5)避免添加与已有索引相似的索引

6)如果表是只读的,并且包含很多行,那么可以尝试定义一个索引,通过CREATE INDEX中的INCLUDE字句使用该索引包含查询中引用的所有列

7)对于联机事务处理(OLTP)环境,创建一个或者两个索引;对于只读查询环境,可以创建5个以上索引;对于混合查询和OLTP环境,可以创建2到5个环境

8)避免在建有索引的列上使用函数

9)在哪些需要排序的列上建立索引

6.影响索引的相关配置

6.1 参数配置

6.1.1 util_heap_sz 配置参数

该参数为大型实用程序堆,在同步更新阶段,大型实用程序堆将提高创建或重组索引的速度。

6.1.2 sheapthres 配置参数

每个子代理程序将获取sortheap配置参数所指定的内存量,以便在扫描表时避免内存溢出。

6.2 为索引指定不同的表空间

可将索引存储在与数据不同的表空间,这样,通过减少索引访问的时间读/写磁头的移动,可以更有效的使用磁盘存储器。也可以更快的在物理设备上创建索引表空间

【DB2】索引的更多相关文章

  1. dB2 索引相关

    ALTER TABLE "XXXX"."tableA" PCTFREE 20 ; CREATE INDEX "schema"."X ...

  2. DB2 索引(2)

    最近研究了一点DB2索引相关的东西,做一个总结: (1)在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构: (2)在经常用连接的列(join)上建索引,这些列主要是一些外键,可以加快连接的速 ...

  3. SQL Server,Oracle,DB2索引建立语句的对比

    原文引至:http://jvortex.blog.163.com/blog/static/16961890020122141010878/ 我们知道,索引是用于加速数据库查询的数据库对象.原理就是减少 ...

  4. db2索引创建和删除

    在表trpt_jv_rpt_log_td的tim列上创建索引 create index dw_rpt.irpt_jv_rpt_log_td_tim on dw_rpt.trpt_jv_rpt_log_ ...

  5. db2 索引

    索引:可通过 SYSCAT.INDEXES JOIN SYSCAT.INDEXCOLUSE来查询索引的字段有升序ASC和降序DESC,分别表示为SYSCAT.INDEXES的COLNAMES中索引字段 ...

  6. 0619数据库_MySQL_由浅入深理解索引的实现

    转自http://blog.csdn.net/u010003835/article/details/51563348 这篇文章是介绍MySQL数据库中的索引是如何根据需求一步步演变最终成为B+树结构的 ...

  7. DB2学习笔记备忘 2018.5.9

    DB2安装的时候选择了和系统用户一致的选项,然后登陆的时候,连接的时候输入的就是计算机用户的用户名和密码. 1.3 DB2数据库体系结构 系统 一个系统表示DB2的一个安装.在一个由很多及其组成的网络 ...

  8. [转帖]新一代IBM Z14主机技术介绍

    新一代IBM Z14主机技术介绍 https://cloud.tencent.com/developer/news/268909 IBM最新的已经有IBM Z15 主机了.. 文章来源:企鹅号 - 云 ...

  9. 数据库的元数据抽取SQL

    一.数据库驱动类.端口.默认用户名密码 数据库 驱动 端口 用户名 密码 MySQL com.mysql.jdbc.Driver 3306 root root DB2 com.ibm.db2.jcc. ...

  10. db2 order by 利用索引

    ORDER BY 通常会有两种实现方法,一个是利用有序索引自动实现,也就是说利用有序索引的有序性就不再另做排序操作了.另一个是把结果选好之后再排序. 用有序索引这种,当然是最快的,不过有一些限制条件, ...

随机推荐

  1. Netty精粹之JAVA NIO开发需要知道的

    学习Netty框架以及相关源码也有一小段时间了,恰逢今天除夕,写篇文章总结一下.Netty是个高效的JAVA NIO框架,总体框架基于异步非阻塞的设计,基于网络IO事件驱动,主要贡献在于可以让用户基于 ...

  2. Ubuntu apt-get 彻底卸载软件包

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/get_set/article/details/51276609 如果你关注搜索到这篇文章,那么我可以 ...

  3. Node.js SDK与fabric链码交互开发

    1.本篇背景 前面已经对链码开发作了比较详细的介绍,并且对官方提供的 fabcar 链码进行了解读,本篇将介绍如何使用 Node.js SDK 与区块链网络中的链码进行交互. 本篇内容基本来自官方 H ...

  4. Apache URL重写的配置 及其 apache500错误

    1:如果apache报500错误时 ----->原因:可能是你的ReWrite模块没有打开(有时在apache重装时会忘记打开该模块) 将apache--->httpd.conf文件中Lo ...

  5. centos7安装redis单机版

    一 下载redis 二 解压安装 cd /opt/ tar -zxf redis-4.0.1.tar.gz cd redis-4.0.1.tar.gz make && make ins ...

  6. 网络监测 断网 网速 ping 完整案例 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  7. Dictionary 的几种遍历方法

    Dictionary 的几种遍历方法 Dictionary<string, int>dic = newDictionary<string, int>(); 方法1 foreac ...

  8. 能够在Linux系统中运行的5款大型耐玩游戏

    Linux 可能不会很快成为游戏玩家选择的平台 —— Valve Steam Machines 的失败似乎是对这一点的深刻提醒 —— 但这并不意味着该平台没有稳定增长,并且拥有相当多的优秀游戏. 从独 ...

  9. LInux 解压缩文件

    常用命令有2个,一个是tar,一个是zip,二选一就行 有的服务器没有安装zip命令,就只有tar可以用,我个人建议还是安装一个zip好一些,tar实在太繁琐 1.解压 tar -zxvf ./xxx ...

  10. 关于ZedGraph几个难点

    1.引言 由于工作原因,需要对数据进行图表展示,.NET默认的控件库或者DotNetBar的控件库又不能满足需求.去网上找到了这个开源的ZedGraph绘制2D图表的程序集,之所以选择这个ZedGra ...