I. 教程
II. SQL 语言
III. 服务器管理
- 章14. 安装指导
- 章15. 在 Windows 上安装客户端
- 章16. 操作系统环境
- 章17. 服务器配置
- 章18. 数据库角色和权限
- 章19. 管理数据库
- 章21. 区域
- 章20. 用户认证
- 章22. 日常数据库维护工作
- 章23. 备份与恢复
- 章24. 高可用性与负载均衡
- 章25. 监控数据库的活动
- 章26. 监控磁盘使用情况
- 章27. 可靠性和预写式日志
- 章28. 回归测试
IV. 客户端接口
- Chapter 28. libpq - C 库
- 章29.
- Chapter 30. ecpg - 在 C 里嵌入 SQL
- Chapter 31. 信息模式
- 31.2. 数据类型
- 31.3. informationschemacatalog_name
- 31.4. applicable_roles
- 31.5. check_constraints
- 31.6. columndomainusage
- 31.7. column_privileges
- 31.8. columnudtusage
- 31.9. columns
- 31.10. constraintcolumnusage
- 31.11. constrainttableusage
- 31.12. datatypeprivileges
- 31.13. domain_constraints
- 31.14. domainudtusage
- 31.15. domains
- 31.16. element_types
- 31.17. enabled_roles
- 31.18. keycolumnusage
- 31.20. referential_constraints
- 31.21. rolecolumngrants
- 31.22. roleroutinegrants
- 31.23. roletablegrants
- 31.24. roleusagegrants
- 31.25. routine_privileges
- 31.26. routines
- 31.27. schemata
- 31.28. sql_features
- 31.29. sqlimplementationinfo
- 31.30. sql_languages
- 31.31. sql_packages
- 31.32. sql_sizing
- 31.33. sqlsizingprofiles
- 31.34. table_constraints
- 31.35. table_privileges
- 31.36. tables
- 31.37. triggers
- 31.38. usage_privileges
- 31.39. viewcolumnusage
- 31.40. viewtableusage
- 31.41. views
V. 服务器端编程
- 章33. 扩展 SQL
- 章34. 触发器
- 章35. 规则系统
- 章36. 过程语言
- 章37. PL/pgSQL - SQL 过程语言
- 章38. PL/Tcl - Tcl 过程语言
- 章39. PL/Perl - Perl 过程语言
- 章40. PL/Python - Python 过程语言
- 章41. 服务器编程接口
VI. 参考手册
- I. SQL 命令
- ABORT
- ALTER AGGREGATE
- ALTER CONVERSION
- ALTER DATABASE
- ALTER DOMAIN
- ALTER FUNCTION
- ALTER GROUP
- ALTER INDEX
- ALTER LANGUAGE
- ALTER OPERATOR
- ALTER OPERATOR CLASS
- ALTER ROLE
- ALTER SCHEMA
- ALTER SEQUENCE
- ALTER TABLE
- ALTER TABLESPACE
- ALTER TRIGGER
- ALTER TYPE
- ALTER USER
- ANALYZE
- BEGIN
- CHECKPOINT
- CLOSE
- CLUSTER
- COMMENT
- COMMIT PREPARED
- COMMIT
- COPY
- CREATE AGGREGATE
- CREATE CAST
- CREATE CONSTRAINT TRIGGER
- CREATE CONVERSION
- CREATE DATABASE
- CREATE DOMAIN
- CREATE FUNCTION
- CREATE GROUP
- CREATE INDEX
- CREATE LANGUAGE
- CREATE OPERATOR CLASS
- CREATE OPERATOR
- CREATE ROLE
- CREATE RULE
- CREATE SCHEMA
- CREATE SEQUENCE
- CREATE TABLE
- CREATE TABLE AS
- CREATE TABLESPACE
- CREATE TRIGGER
- CREATE TYPE
- CREATE USER
- CREATE VIEW
- DEALLOCATE
- DECLARE
- DELETE
- DROP OWNED
- DROP AGGREGATE
- DROP CAST
- DROP CONVERSION
- DROP DATABASE
- DROP DOMAIN
- DROP FUNCTION
- DROP GROUP
- DROP INDEX
- DROP LANGUAGE
- DROP OPERATOR CLASS
- DROP OPERATOR
- DROP ROLE
- DROP RULE
- DROP SCHEMA
- DROP SEQUENCE
- DROP TABLE
- DROP TABLESPACE
- DROP TRIGGER
- DROP TYPE
- DROP USER
- DROP VIEW
- END
- EXECUTE
- EXPLAIN
- FETCH
- GRANT
- INSERT
- LISTEN
- LOAD
- LOCK
- MOVE
- NOTIFY
- PREPARE TRANSACTION
- PREPARE
- REASSIGN OWNED
- REINDEX
- RELEASE SAVEPOINT
- RESET
- REVOKE
- ROLLBACK PREPARED
- ROLLBACK TO SAVEPOINT
- ROLLBACK
- SAVEPOINT
- SELECT
- SELECT INTO
- SET
- SET CONSTRAINTS
- SET ROLE
- SET SESSION AUTHORIZATION
- SET TRANSACTION
- SHOW
- START TRANSACTION
- TRUNCATE
- UNLISTEN
- UPDATE
- VACUUM
- II. PostgreSQL 客户端应用程序
- III. PostgreSQL 服务器应用程序
VII. 内部
- 章42. PostgreSQL 内部概貌
- 章43. 系统表
- 43.1. 概述
- 43.2. pg_aggregate
- 43.3. pg_am
- 43.4. pg_amop
- 43.5. pg_amproc
- 43.6. pg_attrdef
- 43.7. pg_attribute
- 43.8. pg_authid
- 43.9. pgauthmembers
- 43.10. pg_autovacuum
- 43.11. pg_cast
- 43.12. pg_class
- 43.13. pg_constraint
- 43.14. pg_conversion
- 43.15. pg_database
- 43.16. pg_depend
- 43.17. pg_description
- 43.18. pg_index
- 43.19. pg_inherits
- 43.20. pg_language
- 43.21. pg_largeobject
- 43.22. pg_listener
- 43.23. pg_namespace
- 43.24. pg_opclass
- 43.25. pg_operator
- 43.26. pg_pltemplate
- 43.27. pg_proc
- 43.28. pg_rewrite
- 43.29. pg_shdepend
- 43.30. pg_shdescription
- 43.31. pg_statistic
- 43.32. pg_tablespace
- 43.33. pg_trigger
- 43.34. pg_type
- 43.35. 系统视图
- 43.36. pg_cursors
- 43.37. pg_group
- 43.38. pg_indexes
- 43.39. pg_locks
- 43.40. pgpreparedstatements
- 43.41. pgpreparedxacts
- 43.42. pg_roles
- 43.43. pg_rules
- 43.44. pg_settings
- 43.45. pg_shadow
- 43.46. pg_stats
- 43.47. pg_tables
- 43.48. pgtimezoneabbrevs
- 43.49. pgtimezonenames
- 43.50. pg_user
- 43.51. pg_views
- 章44. 前/后端协议
- 章45. PostgreSQL 编码约定
- 章46. 本地语言支持
- 章47. 书写一个过程语言处理器
- 章48. 基因查询优化器
- 章49. 索引访问方法接口定义
- 章50. GiST 索引
- 章51. GIN 索引
- 章52. 数据库物理存储
- 章53. BKI 后端接口
- 章54. 规划器如何使用统计信息
VIII. 附录
CLUSTER
名称
CLUSTER--根据一个索引对某个表群集语法
CLUSTERindexname
ONtablename
CLUSTERtablename
CLUSTER
描述
CLUSTER
指示 PostgreSQL 基于索引 indexname
的度量对表 tablename
进行存储群集。索引必须已经在表 tablename
上定义。
当对一个表群集后,该表的物理存储将基于索引信息进行。群集是一次性操作:当表将来被更新之后,更改的内容不会被群集。也就是说,系统不会试图按照索引顺序对更新过的记录重新群集。如果需要,可以通过周期性地手工执行该命令的方法重新群集。
在对一个表群集之后,PostgreSQL 会记忆在哪个索引上建立了群集。CLUSTER
的形式就在表以前群集的同一个索引上重新群集。tablename
没有任何参数的 CLUSTER
将导致当前数据库里调用用户的所有表都被群集(如果是超级用户的话则所有表都被群集),不过不包括禁止群集的表。这种形式的 CLUSTER
不能在一个事务或者函数里面调用。
在对一个表进行群集的时候,会在其上请求一个 ACCESS EXCLUSIVE
锁。这样就避免了在 CLUSTER
完成之前执行任何其它的数据库操作(包括读写)。
参数
indexname
一个索引名称
tablename
准备群集的表的名称(可能有模式修饰)
注意
如果你只是随机的访问表中的行,那么表中数据的实际存储顺序是无关紧要的。但是,如果对某些数据的访问多于其它数据,而且有一个索引将这些数据分组,那么将从使用 CLUSTER
中获益。如果从一个表中请求一定索引范围的值,或者是一个索引值对应多行,CLUSTER
也会有助于应用,因为如果索引标识出第一匹配行所在的存储页,所有其它行也可能已经在同一个存储页里了,这样便节省了磁盘访问的时间,加速了查询。
在这个群集的操作过程中,系统先创建一个按照索引顺序建立的表的临时拷贝。同时也建立表上的每个索引的临时拷贝。因此,需要磁盘上有足够的剩余空间,至少是表大小和索引大小的和。
因为 CLUSTER
记忆群集信息,可以在第一次的时候手工对表进行群集,然后设置一个类似 VACUUM
的时间,这样就可以周期地自动对表进行群集操作。
因为规划器记录着有关表的排序的统计,所以建议在新近群集的表上运行 ANALYZE 。否则,规划器可能会选择很差劲的查询规划。
还有另外一种群集数据的方法。CLUSTER
命令将原表按你声明的索引重新排列。这个动作在操作大表时可能会很慢,因为每一行都按索引顺序取出,所以如果表没有排序,那么整个表就是随机存放在各个页面里的,因而每移动一行都要进行一次磁盘页面操作。PostgreSQL 有一个缓冲,但一个大表的主体是不可能都放到缓冲去的。这种对表群集的另外方法是
CREATE TABLEnewtable
AS SELECT * FROMtable
ORDER BYcolumnlist
;
这个用法使用排序代码来创建一个需要的顺序,在对未排序的数据操作时速度通常比索引扫描快得多。然后你可以删除旧表,用 ALTER TABLE ... RENAME
将 newtable
改成旧表名,并且重建该表的所有索引。但是,这个方法不保留 OID 、约束、外键关系、赋予的权限、以及其它附属的属性,所有这些属性都必须手工重建。令一个不利之处是这种方法需要一个与原表大小相同的临时排序文件,所以所需磁盘空间将三倍于原表大小。
例子
按照雇员的 emp_ind
属性对 employees
表群集:
CLUSTER emp_ind ON emp;
使用以前用过的同一个索引对 employees
:
CLUSTER emp;
对以前群集过的所有表进行群集:
CLUSTER;
兼容性
SQL 标准里没有 CLUSTER
语句。
又见
clusterdb如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论