cluster.l
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:3k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. ." This is -*-nroff-*-
  2. ." XXX standard disclaimer belongs here....
  3. ." $Header: /usr/local/cvsroot/pgsql/src/man/Attic/cluster.l,v 1.7 1998/03/15 02:13:23 momjian Exp $
  4. .TH CLUSTER SQL 01/23/93 PostgreSQL PostgreSQL
  5. .SH NAME
  6. cluster - give storage clustering advice to Postgres
  7. .SH SYNOPSIS
  8. .nf
  9. fBclusterfR indexname fBonfR attname
  10. .fi
  11. .SH DESCRIPTION
  12. This command instructs Postgres to cluster the class specified by
  13. .IR classname
  14. approximately based on the index specified by 
  15. .IR indexname.
  16. The index must already have been defined on 
  17. .IR classname.
  18. .PP
  19. When a class is clustered, it is physically reordered based on the index
  20. information.  The clustering is static.  In other words, as the class is
  21. updated, the changes are not clusterd.  No attempt is made to keep new
  22. instances or updated tuples clustered.  If desired, the user can
  23. recluster manually by issuing the command again.
  24. .PP
  25. The table is actually copied to temporary table in index order, then
  26. renamed back to the original name.  For this reason, all grant
  27. permissions and other indexes are lost when cluster is performed.
  28. .PP
  29. In cases where you are accessing single rows randomly within a table,
  30. the actual order of the data in the heap table unimportant.  However, if
  31. you tend to access some data more than others, and there is an index
  32. that groups them together, you will benefit from using the CLUSTER
  33. command.
  34. .PP
  35. Another place CLUSTER is good is in cases where you use an index to pull
  36. out several rows from a table.  If you are requesting a range of indexed
  37. values from a table, or a single indexed value that has multiple rows
  38. that match, CLUSTER will help because once the index identifies the heap
  39. page for the first row that matches, all other rows that match are
  40. probably already on the same heap page, saving disk accesses and speeding up
  41. the query.
  42. .PP
  43. There are two ways to cluster data.  The first is with the CLUSTER
  44. command, which reoreders the original table with the ordering of the
  45. index you specify.  This can be slow on large tables because the rows
  46. are fetched from the heap in index order, and if the heap table is
  47. unordered, the entries are on random pages, so there is one disk page
  48. retrieved for every row moved.  PostgreSQL has a cache, but the majority
  49. of a big table will not fit in the cache.
  50. .PP
  51. Another way is to use SELECT ... INTO TABLE temp FROM ...ORDER BY ...
  52. This uses the PostgreSQL sorting code in ORDER BY to match the index,
  53. and is much faster for unordered data.  You then drop the old table, use
  54. ALTER TABLE RENAME to rename 'temp' to the old name, and recreate the b
  55. bindexes.  The only problem is that oids will not be preserved.  From
  56. then on, CLUSTER should be fast because most of the heap data has
  57. already been ordered, and the existing index is used.
  58. .SH EXAMPLE
  59. .nf
  60. /*
  61.  * cluster employees in based on its salary attribute
  62.  */
  63. create index emp_ind on emp using btree (salary int4_ops);
  64. cluster emp_ind on emp
  65. .fi