Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1634492
  • 博文数量: 201
  • 博客积分: 2812
  • 博客等级: 少校
  • 技术积分: 3029
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-18 18:28
个人简介

从事数据库工作多年,目前看好分布式NeSQL/HTAP数据库在企业客户市场的发展。未来的主要方向是——致力于 NewSQL/HTAP 数据库的推广普及。

文章存档

2016年(1)

2015年(8)

2014年(23)

2013年(50)

2012年(32)

2011年(87)

分类: Sybase

2014-01-03 13:17:55

  2.  创建列表和索引
  列表适用于如下一些场景:
    * 通常只是在一个或少量列上执行计算操作
    * 表在进行搜索时通常基于少量列上的值
    * 表有很多列
    * 表有很多行,并且通常进行的是列式操作(比如:聚集计算和where中字段值查找)
    * 需要很高的压缩率。

   我们来看一些列子
    --例1
    CREATE COLUMN TABLE tpch.nation
    (n_nationkey INT NOT NULL,
     n_name CHAR(25),
     n_regionkey INT,
     n_comment VARCHAR(152),
     PRIMARY KEY(n_nationkey)
    )


    --例2(分区,只适用于列表,分区键必须是主键的一部分)
   CREATE COLUMN TABLE tpch.lineitem
    (l_orderkey INT NOT NULL,l_partkey INT,
     l_suppkey INT,l_linenumber INT NOT NULL,
     l_quantity DECIMAL(10,2),l_extendedprice DECIMAL(10,2),
     l_discount DECIMAL(10,2),l_tax DECIMAL(10,2),
     l_returnflag CHAR(1),l_linestatus CHAR(1),
     l_shipdate DATE,l_commitdate DATE,l_receiptdate DATE,
     l_shipinstruct CHAR(25),l_shipmode CHAR(10),
     l_comment VARCHAR(44),
     PRIMARY KEY INVERTED VALUE (l_orderkey,l_linenumber)
    )
    PARTITION BY HASH (l_orderkey,l_linenumber) PARTITIONS 4,
    RANGE (l_shipdate) (    
       PARTITION '2011/01/01'<= VALUES <'2011/04/01',
       PARTITION '2011/04/01'<= VALUES <'2011/07/01',
       PARTITION '2011/07/01'<= VALUES <'2011/10/01',
       PARTITION OTHERS)  
     
    注意:对于HANA来说,行表不支持分区,只有列表支持。列表的一个分区最多支持21亿条记录,为了在列表中存放更多的记录,需要使用分区。

    在上面的创建列表的例子中,我们指定的“UNIQUE”或“PRIMARY KEY”约束,HANA会自动创建相应的索引。这些索引分为两种类型(仅适用于列表)
       *  INVERTED  VALUE     适合于范围查询或like查询
       *  INVERTED  HASH      使用HASH对组合唯一键或组合主键进行编码和压缩。对于等值查询(点查询),这种索引类型具有更好的性能;并且能够减少组合主键存储使用的内存数量。
    如果不指定,缺省是 INVERTED  VALUE。上面的INVERTED VALUE和INVERTED HASH 仅在UNIQUE和PRIMARY KEY约束中使用。下面是指定的示例
        PRIMARY KEY INVERTED VALUE (l_orderkey,l_linenumber)
        PRIMARY KEY INVERTED HASH (l_orderkey,l_linenumber)

        UNIQUE INVERTED VALUE (l_orderkey,l_linenumber)
        UNIQUE INVERTED HASH (l_orderkey,l_linenumber)
         
         
    创建列表上的索引
    列表的主键或唯一键定义的索引是主索引。在列表上还可以创建辅助索引。创建索引的基本语法如下:
         CREATE  INDEX ON (….) ….
    下面是一个示例:
         CREATE INDEX idx_phone ON tpch.customer(c_phone)


  3.  列表的延迟加载和预加载 (行表不支持)
  SAP HANA 缺省情况下对列表采用的是延迟载机制。如果想在SAP HANA实例启动过程中对指定的列表数据进行加载,那么可以对表进行预加载设置。
  示例1:
      ALTER TABLE EMP PRELOAD ALL;   --预加载所有列的所有数据
  示例2:
      ALTER TABLE EMP PRELOAD (EMPNO,ENAME); --预加载指定的列
  示例3: 
      ALTER TABLE EMP PRELOAD NONE –清除表中所有字段的预加载标志

  使用下面的查询可以查看表或字段的预加载标志:
   SELECT IS_PRELOAD FROM SYS.TABLES WHERE TABLE_NAME=‘LINEITEM’
   SELECT PRELOAD from SYS.TABLE_COLUMNS  WHERE TABLE_NAME=‘LINEITEM'


  4.  列表的加载和卸载
  可以把指定的表从内存中卸载,释放其占用的内存。也可以把已经卸载的表重新转载的内存中。只能对COLUMN TABLE进行这些操作
  示例1:
     UNLOAD  tpch.lineitem; 
  示例2:
     LOAD  tpch.customer DELTA ; --把列表的delta部分加载到内存
          LOAD  tpch.customer ALL;      --把列表所有部分,包括delta加载到内存

  5. 行表列表之间的转换
  HANA支持行表转换为列表,或者列表转换为行表。示例如下:
     ALTER TABLE accounts COLUMN THREADS 10 BATCH 10000  --行转列
     ALTER TABLE accounts  ROW THREADS 10   --列表转为行表

阅读(6168) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~