`
ajax_xu
  • 浏览: 156323 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

CLUSTER INDEX

 
阅读更多
CLUSTER INDEX 聚簇索引(以postgre 数据库为例)
2010-12-27 01:06
这里是postgre给出的API相关参考,其它数据库原理可以借鉴。
CLUSTER  INDEX聚簇索引
CLUSTER indexname ON tablename
CLUSTER tablename
CLUSTER

CLUSTER使DBMS根据indexname指定的索引将tablename表聚集。前提是在这个表中已经有此索引。也就是说要先在一个表中建索引,再根据这个索引使这张表聚集。(注意:不要在hash index上聚簇,这样做是没有意义的,hash本来就是无序的,只是用来快速找到相应数据的位置而已。也就是说一般只在b+树的索引上聚簇)
当一张表执行聚簇索引后,它在物理存储上也就根据索引信息的顺序排序了。索引只是一次执行,它以后并不自动重新进行聚簇,也就是说,当在已经聚簇的表中做修改时DBMS并不自动根据修改过的信息重新排序聚簇。如果需要你可以周期性的显式重新聚簇。
一张表聚簇后,系统会记住它所依据的索引,因此CLUSTER tablename就可以用来方便地实现重新聚簇,完成周期性的聚簇任务。
CLUSTER在没有任何参数的情况下,将重新聚簇这个用户当前所拥有的数据库中所有的或被superuser调用过的表。这种形式的CLUSTER不能在事务或函数内调用。
当一张表正在被执行聚簇时,会在其上加ACCESS EXCLUSIVE锁,这时其它操作包括读和写都不能在聚簇完成前执行。
适用情况和注意事项:
     当你随意的取一张表中的单独的一些行时,数据在表中的真实顺序是无关紧要的。但是当你经常取某些数据时,用聚簇索引将这些数据聚集在一起时会非常有效。
         考虑你要取某一范围内的数据,或者一个索引项有很多行满足条件情况下,由于CLUSTER按照指定索引的顺序将数据从物理地址上按序排列,所以一旦索引寻找到某条满足的记录,其它可能满足的数据极有可能和这条记录在同一扇页中,从而减少了取数据时的磁盘寻道和等待的时间。这种情况下CLUSTER很有效果。
     在聚簇执行期间,系统将会建立一个临时的表,这张表将数据按索引顺序存储。同时这张表上的索引本身也会有一个临时的拷贝。因此,你至少需要有这张表与其上的索引大小总和的空余磁盘空间。
     由于CLUSTER记住了聚簇的信息,用户可以在第一次手动聚簇后设定一个类似于VACUUM的时间间隔,系统会周期性的自动重新聚簇。
     还有另外的方法来聚簇数据。CLUSTER命令根据指定的索引次序重新排列表。如果表很大时需要从索引堆中不停的取大量数据,这种情况下尽管有缓存的帮助,执行速度还是会很慢。这时可以用下面的方法:
CREATE TABLE newtable AS
      SELECT columnlist FROM table ORDER BY columnlist;用排序命令ORDER BY实现要求的次序;通常这样做会比扫描无序的数据聚簇速度快。接着删除旧表,用ALTER TABLE …RENAME那个newtable为旧表的名字,再重新在这张表上建索引。但是这样做并不能保证原来的OID的性质被保留,如数据约束、外键关系、授权等级等等,这些都必须手动重新建立。
     下面用个例子具体介绍:
根据索引emp_ind将表employee聚簇:
CLUSTER emp_ind ON emp;
用同样的索引聚簇表employee
CLUSTER emp;
(重新)聚簇这个数据库中先前所有聚簇过的表:
CLUSTER;

SQL标准里并没有要求CLUSTER,所以还要看各个数据库的各种不同的支持情况

另外可以参照clusterdb命令
转载
http://hi.baidu.com/you1030233077/blog/item/0d0fe44d1545b6d8d1c86a11.html
分享到:
评论

相关推荐

    Oracle中聚簇表Cluster Table使用图文详解

    大家通常oracle中的cluster的理解是不准确的,经常和sql server中的cluster index混淆。Cluster是存储一组table的一种方法,这些table共享同一数据块中的某些相同column,并把不同table在这一共享column上值相同的...

    MySQL加锁处理分析@何登成1

    本文将从 MVCC 机制出发,讨论 Snapshot Read 和 Current Read 两种读取方式的区别,然后深入分析 MySQL 加锁机制的实现细节,包括 Cluster Index、2PL、Isolation Level 等方面。最后,本文还将对死锁原理和分析...

    k-均值算法的java实现

    point.setCluster(clusterIndex); } } ``` 3. **更新质心**: ```java public void updateCentroids() { for (int i = 0; i ; i++) { List<DataPoint> clusterPoints = getPointsInCluster(i); if (!...

    oracle优化收藏

    - **B*树群集索引(B*Tree Cluster Index)**:这种索引类型主要用于群集表(Cluster),其中键值指向群集中的一个特定记录。群集表是指多个表物理上存储在一起,通过共同的一组键来关联,适用于具有紧密关联性的多表...

    关系数据库标准语言SQL

    - 命令格式:`CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名> (<列名> [ASC | DESC]);` - `UNIQUE`:确保索引中的每个值都是唯一的。 - `CLUSTER`:表示索引项的顺序与表中记录的物理顺序一致。 - 示例:`...

    索引、视图、标准SQL测试方法

    创建聚集索引的语句是`CREATE CLUSTER INDEX idx_c_id ON test_c(id)`。这种索引适用于经常根据主键进行排序或查找的场景。同样,我们可以使用`sysobjects`表来查询其ID。 3. **唯一索引**:确保索引键的唯一性,...

    Oracle VM Blade Cluster

    - [Oracle VM Documentation](https://docs.oracle.com/cd/E18949_01/html/E18955/index.html) #### 附录 - **A. Network Configuration Checklist**:包含网络配置检查表,帮助用户确保网络配置正确无误。 - **B. ...

    分布式id方法

    这些标识符在数据库设计中通常作为唯一主键,并建立起聚集索引(cluster index),以便于快速查找和排序。此外,为了满足分页和排序等业务需求,通常还需要额外的时间戳字段(time field)以及对应的非聚集索引(non-...

    MySQL Cluster Windows 安装

    IndexMemory=18M # Memory allocated to index storage ``` 总结 通过以上步骤,可以成功地在 Windows 平台上安装 MySQL Cluster。需要注意的是,安装过程中需要根据实际情况进行配置和调整。同时,需要确保所有...

    Oracle8i数据库管理员手册.docx

    - **簇索引**(Cluster Index): 将具有相同簇关键字值的行物理地存储在一起。 - **表索引**(Table Index): 除了存储行的RowID之外,还包含行的值。 - **位映射索引**(Bit Map Index): 特别适用于具有大量重复值的大表...

    sentinel-cluster-server-default-1.8.0-API文档-中文版.zip

    赠送jar包:sentinel-cluster-server-default-1.8.0.jar;...使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明

    数学建模MATLAB代码K-means算法代码

    disp('Cluster index:'); disp(idx); disp('Centroids:'); disp(C); ``` 其中: - `idx`表示每个数据点所属的簇索引; - `C`为最终得到的K个质心。 ##### 扩展功能和参数设置 除了基本的`kmeans`函数外,MATLAB还...

    细聊分布式ID生成方法.pdf

    - **非集群索引(Non-Cluster Index)**:与表的数据物理存储位置无关的索引类型,通常用于提高查询性能。 - **自增(Auto-Increment)**:数据库中一种特殊的字段属性,允许字段值自动递增。 - **主键(Primary Key...

    数据库操作

    - **聚簇索引**:`CREATE CLUSTER INDEX C_ONSC (Grade)`,在`SC`表的`Grade`字段上创建聚簇索引。每张表只能有一个聚簇索引。 #### 八、删除索引 删除索引时需注意索引是否被其他表引用。 ##### 示例代码解析 ``...

    Oracle SQL语句方法

    CLUSTER提示用于处理聚集索引(Cluster Index)。在Oracle中,聚集索引将多个表的行存储在物理上相邻的位置,以减少I/O操作。此提示告诉优化器利用这种物理布局,以提高查询效率。 **示例代码:** ```sql SELECT /...

    厦门大学数据库2005试卷答案

    - **员工表**:`CREATE CLUSTER INDEX Eindex ON Employee (Eno);` —— 通过员工编号快速查询员工信息。 - **客户姓名查询交易**:创建视图 `CNview` 并建立索引 `CREATE INDEX CNindex ON CNview (Cname);`—— ...

    数据挖掘算法以及其实现

    clusters[clusterIndex].push_back(point); } // 更新质心 for (int k = 0; k ; ++k) { double sum = 0.0; for (const auto& point : clusters[k]) { sum += point.value; } centroids[k].value = sum / ...

    MySQL 加锁处理分析1

    2. 聚簇索引(Cluster Index) InnoDB存储引擎使用聚簇索引来组织数据,这意味着主键值直接存储在数据行内,而非在单独的索引结构中。这影响了加锁行为,因为通过主键访问数据时可以直接定位到记录,而通过非主键...

Global site tag (gtag.js) - Google Analytics