zoukankan      html  css  js  c++  java
  • DB2 索引包含创建索引,唯一索引与普通索引的比较

     转自:http://blog.sina.com.cn/s/blog_6e4810810101rv52.html

    在DB2中,添加unique关键词可以创建表索引列的唯一索引。

    CREATE UNIQUE INDEX indname ON tabname(colname) )

    那么唯一索引与一般索引有何区别呢?我们来从下面两个方面来看。

    一.数据加载性能

        为什么说会对加载性能有影响,是由于也许存在该种假设:唯一索引为了在每条新数据插入后,当中是否会做这么一步操作来确保数据的唯一性?那么就设计一个实验来验证一下。

    现在我建了两张表结构相同的两张表T1和T2,区别在于T1建了唯一索引、T2建了一般索引。

    1.分别对两表加载同一份400W行的数据(文件大小约5.2GB)且索引字段的数据不重复,索引创建为REBUILD。结果:

    DB2的唯一索引

    2.现在两表都有400W行的数据存量,接下来再分别导入99W行的新数据(同样索引字段的数据不重复),索引创建为方式为INCREMENTAL.结果:

    DB2的唯一索引

    3.现在我清空T1,并创建表结构相同的T3,T3不建索引,但索引字段加上唯一约束。对400W行的数据的第一行多复制一行变为40000001行,结果:

    DB2的唯一索引

    虽然T3并未执行建索引的操作,但是最后T3的加载日志里出现了更索引时间的相关信息。说明当某列被设定了唯一约束时,系统会对该列自动生成了一个唯一索引。(这个索引名一看就像是系统起的)

    DB2的唯一索引
    相反的,对表的某个字段创建了唯一索引,但系统并不会对该列自动添加唯一约束。所以唯一索引与唯一键的小区别就是,当T1删除唯一索引后,重复的数据是允许被插入的。而唯一键自动生成的唯一索引是不允许被drop的,当取消唯一约束时,该索引也会自动删除。

    当有重复的数据时,都是在更新索引时将重复的行做delete。

    DB2的唯一索引

    从上述的三个加载实验中,我们可以得知:

    1.唯一索引对加载数据没有影响。当有重复数据时,影响的是其更新索引的时间。

    2.DB2是通过更新索引时,索引列排序来检查数据唯一性的。

    二.索引的属性数值

    再来看下唯一索引与一般索引的属性数值:

    DB2的唯一索引
    除了唯一规则不同外,其他都一致相同。因此索引性能也是一样。

    网上对唯一索引的描述里有这么一句话我来吐槽下,这句话是这样的:

    DB2的唯一索引
    只能说稠密度大的索引性能高,不能说唯一索引的性能比一般索引高。虽然知道他所要表达的意思,但明显这个话说的不严谨。从西瓜堆中挑个较熟的西瓜,和从水果拼盘中挑个西瓜片来吃的用时是不一样的,可这两件事没有可比性。比如现在用实验1中的两张表T1、T2去执行同一个查询命令,其所用的查询时间并没有差异。

    DB2的唯一索引
    所以并不是说唯一索引的性能比一般索引高。

        唯一索引和唯一约束的作用是一致的,都是用来保证数据的唯一性。其对加载及查询均无任何添加的副作用。

  • 相关阅读:
    Python学习笔记21:数据库操作(sqlite3)
    JAVA的extends使用方法
    thinkphp5的Illegal string offset 'id'错误
    thinkphp5项目--个人博客(五)
    语法错误: unexpected ''); ?></span></span></h2> ' (T_CONSTANT_ENCAPSED_STRING), expecting ',' or ';'
    thinkphp5.0的验证码安装和相关错误
    thinkphp5项目--个人博客(四)
    thinkphp5项目--个人博客(三)
    NAS是什么
    百度编辑器简介及如何使用
  • 原文地址:https://www.cnblogs.com/a6948076/p/8327421.html
Copyright © 2011-2022 走看看