DB2索引创建原则

数据库
索引创建在数据库系统中是很常见的操作,DB2数据库的索引创建需要遵循一定的原则,下面就让我们一起来了解一下。

DB2索引创建都应该哪些原则呢?这是很多人都提到的问题,下面就为您详细介绍DB2索引创建原则,供您参考学习。

DB2索引实现是一个B+树,通过索引可以实现快速查询,避免全表扫描以此来减少IO操作。

索引是对表数据的一种抽象,通过抽取有限数据,对数据的分布进行计算,以此来完成对数据的快速检索。

索引创建语句

  1. CREATE INDEX <INDEX_NAME> ON <TABLE_NAME> (<COLNAME1,COLNAME2…>

创建索引需要注意的地方:

索引应该用来提高查询速度,但是会对更新和删除操作带来负面影响,因为要同步更新索引。所以索引应该创建到更新、删除相对比读取少的表上。

索引需要独立的空间进行存储和管理。索引是需要磁盘空间来存储。所以避免重复创建冗余索引。如下:

  1. “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)”,这样的索引一般没有什么作用。

索引用来避免表扫描。通过索引对大量数据抽取有限部分,形成一个相对少量的有序数据结构,通过对有序数据结构的查找可以快速想要查找的数据。所以索引适合建立在数据量比较大的表上,而且该表上的查询经常是根据条件查询部分数据。比如一些系统基础表,如SYSTEM表,这些表数据量小,而且经常是查询全部数据,所以这些表上建立索引对性能的影响不是很大,完全可以避免,以免对管理造成影响。

创建索引的目的还有一个就是保证数据唯一性,可以利用”CREATE UNIQUE INDEX <INDEX_NAME> ON <TABLENAME> (<COLNAME>)”,来完成。

主键会隐式创建索引,所以请不要在主键上创建索引浪费空间。

尽量减少索引的创建。DB2路径访问优化器会根据表中所提供的索引来完成尽可能多的访问路径的成本估计。创建过多的索引意味着DB2优化器生成更多的访问路径,完成更多的访问计划成本估算,这会增加SQL语句编译时间。

创建唯一索引可以避免排序。因为索引是有序数据结构,在进行扫描时,DB2会默认按照顺序输出结果,而不是按照插入先后。通过创建唯一索引可以避免排序,提高查询性能。

具有大量重复数据的列上不要创建索引。在大量重复的列上创建索引没有任何意义。如下数据结构:表中字段col1有大量重复数据,其中的数据分布是按照90%的Y,和10%的N来分布。这样的列上创建索引没有任何意义。在查询条件为col1=‘Y’时,该表的索引扫描和表扫描没有特大差异。根据实践经验,列上的数据分布应该均匀,并且抽密度不能大于5 ‰。

创建如下表:

  1. “CREATE TABLE TEST1 (NO INT NOT NULL, NAME CHAR(5))”  
  2.  
  3. “CREATE INDEX TEST1_IDX_1 ON TEST1 (NO)”  
  4.  
  5. “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“  
  6.  
  7. “SELECT * FROM TEST1 WHERE NO = 50”  

以上就是DB2索引创建原则介绍。

 

 

【编辑推荐】

DB2循环查询的实现方法

DB2分区数据库的前滚操作

DB2分区数据库备份的实现方法

DB2目录结构详解

DB2批量执行SQL脚本的实现

 

责任编辑:段燃 来源: 互联网
相关推荐

2010-09-07 17:36:37

DB2索引设计准则

2010-11-02 11:22:06

DB2索引类型

2010-11-03 16:01:31

DB2索引的语法

2010-11-02 14:08:29

DB2创建用户

2010-11-04 15:34:20

DB2索引优化

2010-11-02 11:30:09

DB2索引结构

2010-11-02 14:45:12

DB2创建表空间

2010-07-28 08:58:50

DB2并行索引

2010-11-03 16:32:10

DB2创建数据库

2010-11-03 13:55:39

创建DB2实例

2010-09-01 09:27:21

DB2表名

2010-09-30 14:48:26

DB2查询

2010-08-04 15:00:06

DB2未使用索引

2010-08-26 11:37:38

DB2命令

2010-08-31 10:20:10

DB2MSCS集群

2010-11-01 16:19:18

2010-11-03 15:56:13

DB2创建表

2010-09-30 09:53:05

DB2创建表空间

2010-09-30 10:04:06

DB2创建表空间

2010-11-03 15:49:32

DB2删除表
点赞
收藏

51CTO技术栈公众号