还是放在这块,让大伙儿再研究下吧。
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…>)”。
创建索引需要注意的地方:
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 ‰。
相关推荐
### DB2索引分析器使用详解 在DB2数据库系统中,索引是优化查询性能的关键因素之一。正确地创建和维护索引可以显著提高数据检索的速度。DB2提供了多种工具来帮助用户管理和优化索引,其中“db2advis”索引分析器是...
DB2索引及其优化 DB2索引设计及其优化是数据库性能优化的关键部分。索引可以确保数据的唯一性,提高查询性能,并减少磁盘I/O。然而,索引的创建和维护也需要遵守一定的准则,以避免对数据库性能产生负面影响。 ...
本知识点将详细介绍DB2中索引碎片问题以及如何评估和处理索引碎片对RUNSTATS的影响。 首先,我们需要了解RUNSTATS命令的作用。RUNSTATS是DB2中用于收集表和索引统计数据的命令。统计数据对于查询优化器来说至关重要...
DB2数据库的索引调优,保证大家看了不觉得后悔
EOT锁在DB2文档中可能没有详细介绍,它通常用于表示在表尾部的特殊位置的锁定,比如在进行插入或删除操作时,确保数据的完整性。然而,在rename index操作中,EOT锁可能是由于索引重命名过程中对元数据表的并发访问...
在本篇文章中,我们将详细介绍如何使用`db2top`来收集数据库活动快照,并进一步通过`db2advis`工具分析这些快照数据,为优化数据库性能提供宝贵的索引建议。 首先,为了确保`db2top`能够正确运行,我们需要进行必要...
本文主要介绍了 DB2 缓冲池和索引调优的方法,以解决 DB2 性能问题。在性能问题的表现中,应用系统的响应时间长,耗时数秒到数十秒,操作系统上的表现是 CPU 和 IO 占用不会持续超过 50%,系统运行进程不会有持续的...
DB2 缓冲池和索引调优的方法 DB2 缓冲池和索引调优是 DB2数据库性能优化的关键。缓冲池是 DB2 中的一块区域,用于存放频繁访问的数据,以提高数据库的性能。索引是 DB2 中的一种数据结构,用于快速定位数据。缓冲池...
### DB2常用命令详解 #### 一、导出与导入数据...此外,还介绍了如何使用DB2进行一些高级操作,如查看表结构、处理NULL值、获取日期相关函数等。对于DB2用户来说,熟悉这些命令可以帮助他们更高效地管理和操作数据库。
这些工具可以帮助用户识别查询执行中的性能瓶颈,例如通过查询执行计划分析来优化索引使用,以及调整查询语句来减少不必要的数据扫描和处理。性能优化是确保数据库高效运行的关键,通过分析器的监控和调优功能,用户...
DB2 是一款强大的关系型数据库管理系统,广泛应用于大型企业级应用系统,具备高度的可伸缩性和跨平台兼容性,支持从大型机到单用户环境的多种操作系统,如 OS/2 和 Windows。DB2 提供了高效的数据管理、完整性保护、...
本篇将针对初学者,详细介绍DB2数据仓库的入门知识。 一、DB2基础知识 1. 数据库概念:理解数据库的基本构成,包括表、视图、索引、存储过程等。 2. 关系型数据库模型:了解关系模型的原理,如实体、属性、键和关系...
在DB2数据库管理中,创建索引和进行联机备份是两种常见的操作,但它们可能存在冲突,导致锁等待问题。本文通过一个具体的案例分析,详细解释了这种冲突的原因及解决方法,帮助DB2管理员理解并避免类似问题。 首先,...
│ │ 第8周 DB2索引优化.mp4 │ └ 第8周 DB2索引优化.pdf ├ 第09周 SQL语句调优 │ │ 第9周 SQL语句调优.mp4 │ └ 第9周 SQL语句调优.pdf ├ 第10周 DB2设计最佳实践 │ │ 第10周 DB2设计最佳实践.mp4 │ └ ...
通过使用Visual Explain,DB2管理员可以详细了解查询的执行路径,从而调整索引策略、表结构或查询语法,以提高查询效率。 #### 索引与统计信息 为了提高查询速度,DB2支持创建索引。索引是数据库中的一种数据结构...
DB2 SQL介绍 DB2是IBM推出的一款关系型数据库管理系统,广泛应用于企业的数据存储和管理。SQL,全称Structured Query Language,是用于管理和处理数据库的标准语言。本篇将详细介绍DB2 SQL的基础知识,包括产品版本...
### DB2锁相关情况介绍 #### 一、DB2锁机制概述 DB2数据库系统提供了丰富的锁机制,用于控制并发事务对数据资源的访问,确保数据的一致性和完整性。锁在多用户环境中至关重要,它能避免多个事务同时修改同一数据...
这包括SQL性能分析、索引建议以及内存配置优化。 3. **安全性管理**:Quest Central支持安全管理,允许设置和管理用户权限、角色和认证机制,确保数据库系统的安全性和合规性。 4. **数据迁移与同步**:对于数据库...
DB2 V8数据库基础文档详尽地介绍了IBM的DB2数据库管理系统的核心概念、操作命令以及相关的工具使用。本文将深入探讨这些关键知识点。 首先,DB2是IBM开发的一款关系型数据库管理系统,它在企业级应用中广泛使用,...
本手册主要介绍了DB2数据库系统的命令和配置参数,涵盖了DB2管理服务器、实例、数据库、表、索引、视图、存储过程、触发器、函数等方面的知识点。下面将逐一详细介绍这些知识点。 DB2管理服务器命令 DB2管理服务器...