PostgreSql数据库的重建索引是通过REINDEX命令实现的,比如REINDEX _ name;
它的语法是:
1索引{索引|表|数据库|系统}名称[强制];
下面解释了这种情况下的需要:
1.当索引因软唐山网站建设公司的bug或硬件原因不再可用时,索引数据也不再可用;
2.当索引包含许多空的或接近空的页面时,这将发生在b树索引中。重新索引为释放无用的页面腾出空间(页面是存储数据的单位,类似于块)。
3.PostgreSql数据库系统修改了存储参数,需要重建,否则会失败(如修改fillfactor参数);
4.创建并发索引失败,留下无效索引。这样的索引就不用了,重建后可以用。索引的重建不能同时执行。
以下描述了重构索引命令的参数:
1.INDEX重建指定的索引;
2.TABLE重建指定表的所有索引,包括下面的TOAST表;
3.数据库重建指定数据库的所有索引,系统共享索引也将被执行。应该注意,这种级别的重构不能在另一个事务块中执行。
4.系统重构该系统的索引包含当前数据库。包含共享系统中的索引页,但不处理用户自己的表,也不能在事务块中执行。
5.名称根据不同的级别索引的名称。
6.武力已被废除。就算写了也会被忽略。
示例:
REINDEX INDEX my _ index
REINDEX TABLE my _ table
REINDEX DatabaSe break _ db;
此外,应当指出:
1.重建索引不同级别的重建需要不同的权限。例如,表需要操作索引的权限。例如,超级用户postgres拥有此权限。
2.重构索引的目的是当索引的数据不可信时,即成本的计算会出现较大偏差,不利于优化器得到最优的执行计划,从而导致性能优化失败。
3.重构索引类似于在创建索引之前删除所有内容,但索引的条目会重新启动。重构期间无法写入当前索引,因为此时存在排他锁。
4.在8.1版之前,REINDEX DATABASE只包含系统索引,而不是所有预期指定数据库的索引。7.4版之前的REINDEX TABLE不会自动执行从属的TOAST表。
关于TOAST表的含义:
TOAST的直接翻译意思是slicedbread,全称是超大属性存储技术。
为什么会有一个EXAMBED-ATTRIBUTE?原因很简单,因为在PostgreSQL中,一条记录不能跨PAGE存储。
如果您跨越了PAGE,您必须使用TOAST(即未对齐,它与原始表分开存储)。
不能独立创建TOAST表。只有当普通表包含主、扩展或外部存储格式的字段时,系统才会自动创建一个与普通表相关联的TOAST表。
当一个记录(tuple)被存储(如果被压缩,压缩后的大小)大于TOAST_TUPLE_THRESHOLD(通常是2kB)的值时,它将被存储在TOAST表中。