深入DB2索引
ü DB2索引简介
ü DB2索引结构
ü DB2索引访问机制
ü DB2索引设计
ü DB2索引创建原则
ü DB2索引维护
ü DB2索引优化
1、DB2索引简介
索引优点:
(1) 创建索引可提高查询速度。
(2) 创建索引保证数据唯一性。
索引类型:
在介绍索引类型前介绍一下关于稠密度的概念.
稠密度定义:在数据分布均匀的情况下,稠密度=数据分布的可能数/数据总条数。例如:表1中有索引1在列1上,其中列1的数据分布有10中,分别是1-10,数据接近均匀分布,总数据量为1000,则该索引的稠密度=100/1000=10%,稠密度最高为1。稠密度越小,索引的选择性越大,查询性能越好。
(1) 非唯一索引
可以说大部分的索引的非唯一索引,这和数据的分布有关系,一般的数据都具有可重复性特性,所以他们不能被定义为唯一索引。非唯一索引可以使用命令:
CREATE INDEX <IDX_NAME> ON <TAB_NAME> (<COLNAME>)来定义。
(2) 唯一索引
唯一索引用来保证数据的唯一性,唯一索引一般性能要高于非唯一索引,这与索引的稠密度有关。唯一索引的稠密度永远等于数据总条数的倒数。
(3) 纯索引
纯索引的概念是相对与一般索引。如下方式表中有俩个字段,其中字段1是唯一主键,字段2为数据,实际的查询中经常是select * from 表 where col1=?
这样的查询条件可以使用纯索引来避免表查询,具体创建命令为
CREATE UNIQUE INDEX <IDX_NAME> ON <TAB_NAME> (COL1_NAME) INCLUDE(COL2_NAME)。上述的语句的意思就是在col1上创建唯一索引,选择包含col2的数据,这些附加的数据将与键存储到一起,但是不作为索引的一部分,所以不被排序。纯索引访问是用来减少对数据页的访问,因为所需要的数据已经显示在索引中了。
(4) 群集索引
群集索引允许对数据页采用更线性的访问模式,允许更有效的预取,并且避免排序。群集索引是要求数据在插入时,做更多的操作,将相临的数据条目放入相同的页,使得查询速度更快,因为每次访问索引页要将所有的索引条目都访问完毕才移到下一页,保证了缓存池中任何一个时刻都只有一个索引页存在。
群集索引的特点:
提高查询速度,数据页以键的顺序排列;
以键的顺序扫描整张表;
插入和更新需要做更多的事情,不建议经常插入和更新的表上做群集索引;
2、DB2索引结构
在DB2中,索引的数据结构是一颗B+树。B树把它的存储块组织成一棵树。这棵树是平衡的,即从树根到树叶的所有路径都一样长。通常B树有三层:根、中间层和叶,但也可以是任意多层。
典型的B+树结构:
根结点中至少有两个指针被使用。所有指针指向位于B树下一层的存储块;
叶结点中,最后一个指针指向它右边的下一个叶结点存储块,即指向下一个键值大于它的块。在叶块的其他n个指针当中,至少有个指针被使用且指向数据记录;未使用的指针可看作空指针且不指向任何地方。如果第i个指数被使用,则指向具有第i个键值的记录;
在内层结点中,所有的n+ 1个指针都可以用来指向B树中下一层的块。其中至少
个指针被实际使用(但如果是根结点,则不管n多大都只要求至少两个指针被使用)。如果j个指针被使用,那该块中将有j-1个键,设为K1,K2⋯⋯,Kj - 1。第一个指针指向B树的一部分,一些键值小于K1的记录可在这一部分找到。第二个指针指向B树的另一部分,所有键值大小等于K1且小于K2的记录可在这一部分中。依此类推。最后,第j个指针指向B树的又一部分,一些键值大于等于Kj - 1的记录可以在这一部分中找到。注意:某些键值远小于K1或远大于Kj - 1的记录可能根本无法通过该块到达,但可通过同一层的其他块到达。
假若我们以常规的画树方式来画B树,任一给定结点的子结点按从左(第一个子结点)到右(最后一个子结点)的顺序排列。那么,我们在任何一个层次上从左到右来看B树的结点,结点的键值将按非减的顺序出现。
DB2中索引结构
标准表的表和索引管理
记录表示和数据页
在DB2中可使用命令db2dart <dbname> /di /tsi <tabspacesid> /oi <tableid> /ps <N>p /np 1 /v y来查看索引的物理结构以增加对索引的理解。
例如:主库中
3、 DB2索引访问机制
快速索引式访问
一般来将DB2最快的数据访问方式就是使用索引。索引是为了快速找着数据块的数据结构。
在DB2使用索引来查询数据前,必须满足以下要求:
至少有一个SQL谓词必须是可索引的。
其中一列必须作为可用索引中的列而存在。
4、 DB2索引创建原则
DB2索引实现是一个B+树,通过索引可以实现快速查询,避免全表扫描以此来减少IO操作。
索引是对表数据的一种抽象,通过抽取有限数据,对数据的分布进行计算,以此来完成对数据的快速检索。
索引创建语句”CREATE INDEX <INDEX_NAME> ON <TABLE_NAME> (<COLNAME1,COLNAME2…>)”。
X`
创建索引需要注意的地方:
l 索引应该用来提高查询速度,但是会对更新和删除操作带来负面影响,因为要同步更新索引。所以索引应该创建到更新、删除相对比读取少的表上。
l 索引需要独立的空间进行存储和管理。索引是需要磁盘空间来存储。所以避免重复创建冗余索引。如下:“CREATE TABLE TEST_IDX (COL1 INT NOT NULL, COL2 INT NOT NULL, COL3 IN NOT NULL)”“CREATE INDEX TEST_IDX_IDX1 ON TEST_IDX (COL1, COL2, COL3)”已经有索引TEST_IDX_IDX1在三个列上,在创建”CREATE INDEX TEST_IDX_IDX2 ON TEST_IDX (COL1, COL2)”,这样的索引一般没有什么作用。
l 索引用来避免表扫描。通过索引对大量数据抽取有限部分,形成一个相对少量的有序数据结构,通过对有序数据结构的查找可以快速想要查找的数据。所以索引适合建立在数据量比较大的表上,而且该表上的查询经常是根据条件查询部分数据。比如一些系统基础表,如SYSTEM表,这些表数据量小,而且经常是查询全部数据,所以这些表上建立索引对性能的影响不是很大,完全可以避免,以免对管理造成影响。
l 创建索引的目的还有一个就是保证数据唯一性,可以利用”CREATE UNIQUE INDEX <INDEX_NAME> ON <TABLENAME> (<COLNAME>)”,来完成。
l 主键会隐式创建索引,所以请不要在主键上创建索引浪费空间。
l 尽量减少索引的创建。DB2路径访问优化器会根据表中所提供的索引来完成尽可能多的访问路径的成本估计。创建过多的索引意味着DB2优化器生成更多的访问路径,完成更多的访问计划成本估算,这会增加SQL语句编译时间。
l 创建唯一索引可以避免排序。因为索引是有序数据结构,在进行扫描时,DB2会默认按照顺序输出结果,而不是按照插入先后。通过创建唯一索引可以避免排序,提高查询性能。
l 具有大量重复数据的列上不要创建索引。在大量重复的列上创建索引没有任何意义。如下数据结构:表中字段col1有大量重复数据,其中的数据分布是按照90%的Y,和10%的N来分布。这样的列上创建索引没有任何意义。在查询条件为col1=‘Y’时,该表的索引扫描和表扫描没有特大差异。根据实践经验,列上的数据分布应该均匀,并且抽密度不能大于5 ‰。
索引扫描原理图:
创建如下表:
“CREATE TABLE TEST1 (NO INT NOT NULL, NAME CHAR(5))”
“CREATE INDEX TEST1_IDX_1 ON TEST1 (NO)”
“INSERT INTO TEST1 SELECT ROW_NUMBER() OVER(), CHR(INT(RAND()*75+48))||CHR(INT(RAND()*75+48))||CHR(INT(RAND()*75+48)) FROM SYSCAT.COLUMNS T1 JOIN SYSCAT.COLUMNS T2 ON T1.COLNAME!=T2.COLNAME FETCH FIRST 100 ROWS ONLY“
“SELECT * FROM TEST1 WHERE NO = 50”
5、DB2索引维护
6、DB2索引优化
谓词类型
|
可索引
|
注 释
|
Col∝con
|
Y
|
∝代表>,>=,=,<=,<,但是<>是可能不可索引的。
|
Col between con1 and con2
|
Y
|
在匹配系列中必须是最后的。
|
Col in list
|
Y
|
仅对一个匹配列
|
Col is null
|
Y
|
|
Col like ‘xyz%’
|
Y
|
模糊匹配%在后面。
|
Col like ‘%xyz’
|
N
|
模糊匹配%在前面。
|
Col1∝Col2
|
N
|
Col1和col2来自同一个表
|
Col∝Expression
|
N
|
例如:c1(c1+1)/2
|
Pred1 and Pred2
|
Y
|
Pred1和Pred2都是可索引的,指相同索引的列
|
Pred1 or Pred2
|
N
|
除了(c1=a or c1=b)外,他可以被认为是c1 in(a,b)
|
Not Pred1
|
N
|
或者任何的等价形式:Not between,Not in,Not like等等。
|
- 大小: 22.7 KB
- 大小: 44.6 KB
- 大小: 21.7 KB
- 大小: 22.1 KB
分享到:
相关推荐
在DB2数据库中,重命名不同的索引可能会引发一种名为EOT(End of Table)锁等待问题,这在日常操作中并不常见,因此可能导致DBA在遇到时感到困惑。EOT锁是一种特定类型的行级锁定,它在某些情况下用于表的元数据管理...
标题:“深入解析DB2—高级管理,内部体系结构与诊断案例” 描述:“深入解析DB2—高级管理,内部体系结构与诊断案例”是一份专业且深度的文档,旨在为DB2数据库管理员、开发者以及对DB2有兴趣的技术人员提供全面而...
│ │ 第8周 DB2索引优化.mp4 │ └ 第8周 DB2索引优化.pdf ├ 第09周 SQL语句调优 │ │ 第9周 SQL语句调优.mp4 │ └ 第9周 SQL语句调优.pdf ├ 第10周 DB2设计最佳实践 │ │ 第10周 DB2设计最佳实践.mp4 │ └ ...
例如,使用DB2的监控工具如db2pd或db2trace,分析锁列表和事务状态,可以深入了解锁等待的详细情况。 总之,DB2创建索引和数据库联机备份之间的冲突是由于内部的联机备份锁机制导致的。通过理解这个机制,调整备份...
- 索引用于提高查询性能,DB2支持唯一索引、非唯一索引、聚簇索引和非聚簇索引。 - 创建和管理索引是数据库优化的关键步骤,需要根据查询模式和数据分布来选择合适的索引策略。 5. 视图: - 视图是虚拟表,基于...
8.8 DB2 Design Advisor(db2advis) 8.9 索引调整总结 第9章 DB2优化器 9.1 DB2优化器介绍 9.2 SQL语句执行过程 9.3 优化器组件和工作原理 9.4 扫描方式 9.5 连接方法 9.6 优化级别 9.7 如何影响优化器来提高性能 ...
在DB2中,有多种类型的索引可供选择,如B树索引、位图索引、XML索引等,每种索引都有其适用场景。同时,索引的维护也非常重要,定期更新统计信息以确保优化器能做出准确的成本估算。 再者,内存管理对数据库性能至...
在这个部分,我们将深入探讨DB2的帮助系统以及DB2ir的功能和用法。 DB2的帮助系统为用户提供了一种方便的方式来查找和理解DB2的各种命令、函数、语法和特性。它包含了详尽的文档,涵盖了安装、配置、数据库管理和...
1. 数据存储与管理:DB2支持SQL标准,能够处理结构化数据,如表格、视图和索引。它提供了事务处理能力,确保数据的一致性和完整性。 2. 高可用性与容错:DB2支持集群和镜像技术,当主服务器故障时,可以自动切换到...
本文将深入探讨如何通过命令行界面登录到DB2数据库,这对于系统管理员和开发人员来说是一项基本技能。 首先,我们需要了解`db2cmd`这个命令。`db2cmd`是DB2提供的一种命令行接口,它创建了一个环境,使得用户可以在...
通过 DB2 认证的考试,你需要对 DB2 的基础知识、SQL、索引、访问计划、安全性等方面有深入的理解。 1. 在创建表 `EMPLOYEE` 的示例中,`DOMAIN` 指的是某一列的有效值范围或类型。选项 B 正确描述了一个域的概念,...
在深入优化DB2数据库的过程中,理解数据库的内部工作原理以及如何有效地使用SQL是至关重要的。DB2数据库系统在每个新版本中都会引入大量的优化代码,尤其是针对智能优化、查询重写和执行的改进。其中,数据管理器...
3. **DB2DevGettingStarted-db2axc1010.pdf** - 这是DB2开发人员的入门指南,讲解如何创建数据库、编写SQL查询、管理数据库对象(如表、索引和视图)以及进行基本的数据库操作。 4. **DB2InstallingConnectPE-db2c1...
通过这个工具,开发人员和DBA可以高效地进行数据查询、分析和管理,而无需深入学习DB2命令行界面。 在实际使用中,你可能需要下载和安装相应的DB2 JDBC驱动(通常为db2jcc.jar和db2jcc_license_cu.jar),并将它们...
本文将详细介绍如何在DB2中查看SQL执行计划,并通过实际案例深入解析相关命令及其参数的作用。 ### 一、DB2简介 DB2是IBM公司开发的一款关系型数据库管理系统(RDBMS),广泛应用于企业级应用中。它支持多种操作系统...
对于DB2的专业用户,如数据库管理员、开发人员或者系统分析师,深入理解DB2的细节是非常必要的,因为它有助于优化性能、确保数据安全和提高故障恢复能力。 在提供的内容中,主要讨论了DB2中与文本索引相关的操作和...
"DB2 习题+认证指南"是一份重要的学习资料,旨在帮助用户深入理解和掌握DB2的相关知识,尤其是对于准备DB2 730认证的考生而言,这份资料具有极高的参考价值。 DB2 730认证是IBM提供的专业认证之一,主要针对DB2 V...
DB2是IBM开发的一款关系型数据库管理系统,广泛应用于企业级数据存储和管理。在DB2系统中,进程扮演着至关重要的角色,它们是系统...深入了解DB2进程及其工作原理,对于日常运维、性能调优以及问题排查具有重要意义。
DB2是IBM公司开发的一款关系...通过阅读这些资料,初学者可以逐步掌握DB2数据仓库的基础知识,为进一步深入学习和实践打下坚实基础。在学习过程中,不断实践和探索,将理论知识与实际操作相结合,是成为DB2专家的关键。
### DB2 SQL性能调优秘笈 ...通过学习这些内容,DBA们可以更加深入地理解DB2内部的工作机制,并掌握一系列有效的性能调优方法。这对于任何希望提高DB2数据库性能的专业人士而言都是一本宝贵的参考书籍。