SYNOPSIS

CLUSTER indexname ON tablename
CLUSTER tablename
CLUSTER

DESCRIPTION 描述

CLUSTER 指示PostgreSQL 基于索引 indexname 的度量对表 table 进行存储建簇。索引必须已经在表 tablename. 上定义。

当对一个表建簇后,该表的物理存储将基于索引信息进行。 建簇是一次性操作:也就是说,当表随后被更新后,改变的内容不会建簇。 也就是说,系统不会试图按照索引顺序对更新过的记录重新建簇。 如果需要,可以通过周期性地手工执行该命令的方法重建簇。

在对一个表建簇之后,PostgreSQL  会记忆在哪个索引上建立的簇。 CLUSTER tablename  的形式就在表以前建簇的同一个索引上建簇。

没有任何参数的 CLUSTER 将导致当前数据库里所有调用它的用户所有的表都被建簇。 (绝不会对不包括进来的表建簇。)这种形式的
CLUSTER 不能在一个事务或者函数里面调用。

在对一个表进行建簇的时候,则在其上请求一个 ACCESS EXCLUSIVE 锁。 这样就避免了在 CLUSTER 完成之前执行任何其他的数据库操作(包括读写)。 参阅 Section 12.3 获取有关数据库锁定的更多信息。

PARAMETERS 参数

indexname
 一个索引名称。
tablename
 准备建簇的表的名称(可能有模式修饰)。

NOTES 注意

如果你只是随机的访问表中的行, 那么在堆表中的数据的实际存储顺序是无关紧要的。 但是,如果你对某些数据的访问多于其他数据, 而且有一个索引将这些数据分组,那你就将从使用 CLUSTER 中获益。 如果你从一个表中请求一定索引范围的值, 或者是一个索引过的值对应多行, CLUSTER 也会有助于应用, 因为如果索引标识出第一匹配行所在的堆存储页,所有其他行也可能已经在同一堆存储页里了, 这样便节省了磁盘访问的时间,加速了查询。

在这个建簇的操作过程中,系统先创建一个按照索引顺序建立的表的临时拷贝。 同时也建立表上的每个索引的临时拷贝。因此,你需要磁盘上有足够的剩余空间, 至少是表大小和索引大小的和。

因为 CLUSTER 记忆建簇信息,我们可以在第一次的时候手工对表进行建簇, 然后设置一个类似 VACUUM 的时间, 这样我们就可以周期地自动对表进行建簇了。

因为规划器记录着有关表的排序的统计,所以我们建议在新近建簇的表上运行 ANALYZE。 否则,规划器可能会选择很差劲的查询规划。

还有一种建簇的方法。 CLUSTER 命令将原表按你声明的索引重新排列。 这个动作在操作大表时可能会很慢, 因为每一行都从堆存储页里按索引顺序取出,如果存储页表没有排序, 整个表是随机存放在各个页面的,因而移动的每一行都要进行一次磁盘页面操作。 PostgreSQL 有一个缓冲, 但一个大表的主体是不可能都放到缓冲去的。 另外一种对表建簇的方法是

CREATE TABLE newtable AS
SELECT columnlist FROM table ORDER BY columnlist;

这个用法使用PostgreSQL  排序的代码 ORDER BY 来创建一个需要的顺序,在对未排序的数据操作时通常速度比索引扫描快得多。 然后你可以删除旧表,用 ALTER TABLE ... RENAME将 newtable 改成旧表名, 并且重建该表所有索引。但是,这个方法不保留 OID,约束,外键关系, 赋予的权限,以及表的其它附属的属性 ---- 所有这些属性都必须手工重建。

EXAMPLES 例子

以雇员的 emp_ind 属性对employees关系建簇。

CLUSTER emp_ind ON emp;

使用以前用过的同一个索引对employees表进行建簇:

CLUSTER emp;

对以前建过簇的所有表进行建簇:

CLUSTER;

COMPATIBILITY 兼容性

在 SQL 标准里没有 CLUSTER 语句。

CLUSTER - 根据一个索引对某个表集簇的更多相关文章

  1. Oracle索引梳理系列(五)- Oracle索引种类之表簇索引(cluster index)

    版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...

  2. Sql Server 中将由逗号“,”分割的一个字符串转换为一个表集,并应用到 in 条件中

    Sql Server 中将由逗号“,”分割的一个字符串,转换为一个表,并应用与 in 条件 ,,) 这样的语句和常用,但是如果in 后面的 1,2,3是变量怎么办呢,一般会用字符串连接的方式构造sql ...

  3. oracle怎么查看一个表或一个索引占用多少空间

    很多时候我们想知道一个表或一个索引占用多少M的空间,以下脚本就是满足这个要求的,记住替换其中的内容. SELECT owner, segment_name, SUM(bytes)/1024/1024 ...

  4. 【MySQL】MySQL(四)存储引擎、索引、锁、集群

    MySQL存储引擎 MySQL体系结构 体系结构的概念 任何一套系统当中,每个部件都能起到一定的作用! MySQL的体系结构 体系结构详解 客户端连接 支持接口:支持的客户端连接,例如C.Java.P ...

  5. MariaDB Galera Cluster 部署(如何快速部署 MariaDB 集群)

    MariaDB Galera Cluster 部署(如何快速部署 MariaDB 集群)  OneAPM蓝海讯通7月3日 发布 推荐 4 推荐 收藏 14 收藏,1.1k 浏览 MariaDB 作为 ...

  6. MariaDB Galera Cluster 部署(如何快速部署MariaDB集群)

    MariaDB Galera Cluster 部署(如何快速部署MariaDB集群) [日期:--] 来源:Linux社区 作者:Linux [字体:大 中 小] MariaDB作为Mysql的一个分 ...

  7. sql语句优化:尽量使用索引避免全表扫描

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  8. asp.net使用post方式action到另一个页面,在另一个页面接受form表单的值!(报错,已解决!)

    原文:asp.net使用post方式action到另一个页面,在另一个页面接受form表单的值!(报错,已解决!) 我想用post的方式把一个页面表单的值,传到另一个页面.当我点击Default.as ...

  9. SQL SERVER 自动生成 MySQL 表结构及索引 的建表SQL

          SQL SERVER的表结构及索引转换为MySQL的表结构及索引,其实在很多第三方工具中有提供,比如navicat.sqlyog等,但是,在处理某些数据类型.默认值及索引转换的时候,总有些 ...

随机推荐

  1. Spring配置事务的五种方式

    Java事务的类型有三种: JDBC事务. 可以将多个 SQL 语句结合到一个事务中.JDBC 事务的一个缺点是事务的范围局限于一个数据库连接.一个 JDBC 事务不能跨越多个数据库 JTA(Java ...

  2. APACHE2 服务器配置 (二) 默认端口***

    如将默认的80端口修改为9000 不管怎样,只要你选择合适的端口(电信商没有封的),进行如下的设置即可: 1, 修改 /etc/apache2/ports.conf 将 NameVirtualHost ...

  3. Lightoj 1140(数位DP)

    求一个区间内的数含有多少个0. dp[len][pre]表示长度为len的数,含有pre个0. 需要加一个标记,来表示前缀是否为0(可以是一串连续的0),如果前缀一直为0,就一直搜,如果前缀不为0,就 ...

  4. asp.net 常用代码

    asp.net 下拉菜单选中 ddlCity.SelectedIndex = ddlCity.Items.IndexOf(ddlCity.Items.FindByValue(")); 关于. ...

  5. Ubuntu 12.04下安装配置体验GNOME 3(转载)

    转自:http://www.tuicool.com/articles/zIbeIj 自己并不是一个思想前卫的人,穿衣审美也都是大众眼光.但是唯独喜欢在计算机方便尝试最新,心肝情愿的做小白鼠.近日,按耐 ...

  6. PCB 铜皮(Surface)折线多边形扩大缩小实现(第一节)

    继续铜皮多边形的相关的算法, 如何用代码实现多边形的扩大与缩小,这部份内容准备分为四节内容来讲解, 第一节,折线多边形的扩大缩小(不包含圆弧)   此篇讲第一节 第二节,带圆弧的多边形的扩大缩小 第三 ...

  7. bzoj 3144 [Hnoi2013]切糕【最小割+dinic】

    都说了是'切'糕所以是最小割咯 建图: 每个点向下一层连容量为这个点的val的边,S向第一层连容量为inf的边,最后一层向T连容量为自身val的边,即割断这条边相当于\( f(i,j) \)选择了当前 ...

  8. pytest特色与实用插件

    pytest特色 1.fixture的特点 fixture是pytest特有的功能,其特点如下: 必须用pytest.fixture装饰器装饰:fixture有明确的名字,在其他函数(function ...

  9. python之定时器Timer

    timer类 Timer(定时器)是Thread的派生类,用于在指定时间后调用一个方法. 构造方法: Timer(interval, function, args=[], kwargs={})  in ...

  10. JavaScript编程艺术-第7章代码汇总(1)

    1.document.write()(HTML与JS未分离) HTML: JS: 2..innerHTML(直接覆盖) HTML: JS: 3.getAttribute.setAttribute.ge ...