PostgreSQL索引维护看完这篇就够了

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: PostgreSQL索引维护看完这篇就够了

1.创建索引

  1. CREATE TABLE test1 (id integer, content varchar);
  2. CREATE INDEX test1_id_index ON test1 (id);

2. 查看某表的索引

  1. \d test1

3.查看表索引的数量

test1指需要查看的表名

  1. SELECT CONCAT(n.nspname,'.', c.relname) AS table,
  2.    i.relname AS index_name FROM pg_class c
  3.     JOIN pg_index x ON c.oid = x.indrelid
  4.     JOIN pg_class i ON i.oid = x.indexrelid LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
  5.  WHERE c.relkind = ANY (ARRAY['r', 't']) AND c.relname like 'test1';

4.查看索引统计信息

通过 pg_stat_user_indexes 视图可以查看索引的使用情况和性能统计信息

  1. SELECT * FROM pg_stat_user_indexes WHERE relname = 'test1';

5.检查索引唯一性

索引是一项解决数据库性能功能,但与此同时,它也可用于确保唯一性。但是,为了确保唯一性,我们需要一种称为唯一索引的单独索引类型。为了检查索引是否唯一,pg_index有一个名为indisunique的列来标识索引的唯一性。

  1. SELECT    i.relname AS index_name,
  2.          indisunique is_unique
  3. FROM      pg_class c
  4. JOIN      pg_index x ON c.oid = x.indrelid
  5. JOIN      pg_class i ON i.oid = x.indexrelid
  6. LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
  7. WHERE     c.relkind = ANY (ARRAY['r', 't'])
  8. AND       c.relname LIKE 'test1';

6.查看索引的大小

这是一种非常简单的方法来获取PostgreSQL索引的大小,test1_id_index指建的索引名。

  1. SELECT pg_size_pretty(pg_relation_size('test1_id_index'));

7.查看索引、表、两者总大小

  1. SELECT    CONCAT(n.nspname,'.', c.relname) AS table,
  2.          i.relname AS index_name, pg_size_pretty(pg_relation_size(x.indrelid)) AS table_size,
  3.          pg_size_pretty(pg_relation_size(x.indexrelid)) AS index_size,
  4.          pg_size_pretty(pg_total_relation_size(x.indrelid)) AS total_size FROM pg_class c
  5. JOIN      pg_index x ON c.oid = x.indrelid
  6. JOIN      pg_class i ON i.oid = x.indexrelid
  7. LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
  8. WHERE     c.relkind = ANY (ARRAY['r', 't'])
  9. AND       n.oid NOT IN (99, 11, 12375);

8.获取索引创建语句

该查询将显示索引创建语句

  1. SELECT pg_get_indexdef(indexrelid) AS index_query
  2. FROM   pg_index WHERE  indrelid = 'test1'::regclass;

9.重新构建索引

如果索引损坏或过大,则需要再次构建该索引。同时,不想阻塞表上的操作,可以选择使用REINDEX CONCURRENTLY命令。

  1. REINDEX INDEX CONCURRENTLY test1_id_index;

10.索引支持的数据类型

  1. SELECT amname,opfname FROM pg_opfamily,pg_am WHERE opfmethod = pg_am.oid AND amname = 'btree';

11.查找从未使用过的索引

如果index_scans为0或接近0,则可以删除这些索引。

  1. SELECT s.relname AS table_name,
  2.       indexrelname AS index_name,
  3.       i.indisunique,
  4.       idx_scan AS index_scans
  5. FROM   pg_catalog.pg_stat_user_indexes s,
  6.       pg_index i
  7. WHERE  i.indexrelid = s.indexrelid;

12.查找重复索引

  1. SELECT   indrelid::regclass table_name,
  2.         att.attname column_name,
  3.         amname index_method
  4. FROM     pg_index i,
  5.         pg_class c,
  6.         pg_opclass o,
  7.         pg_am a,
  8.         pg_attribute att
  9. WHERE    o.oid = ALL (indclass)
  10. AND      att.attnum = ANY(i.indkey)
  11. AND      a.oid = o.opcmethod
  12. AND      att.attrelid = c.oid
  13. AND      c.oid = i.indrelid
  14. GROUP BY table_name,
  15.         att.attname,
  16.         indclass,
  17.         amname, indkey
  18. HAVING count(*) > 1;

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
3月前
|
监控 关系型数据库 数据库
PostgreSQL的索引优化策略?
【8月更文挑战第26天】PostgreSQL的索引优化策略?
82 1
|
3月前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
268 0
|
存储 关系型数据库 数据库
PostgreSQL技术大讲堂 - 第28讲:索引内部结构
从零开始学PostgreSQL技术大讲堂 - 第28讲:索引内部结构
703 2
|
关系型数据库 Go 数据库
《提高查询速度:PostgreSQL索引实用指南》
《提高查询速度:PostgreSQL索引实用指南》
555 0
|
关系型数据库 分布式数据库 数据库
PolarDB for PostgreSQL 14:全局索引
PolarDB for PostgreSQL 14 相较于 PostgreSQL 14,提供了更多企业级数据库的特性。本实验将体验其中的全局索引功能。
814 0
|
弹性计算 关系型数据库 OLAP
AnalyticDB PostgreSQL版向量索引查询
本案例对比了传统查询和使用向量索引执行查询的执行时间,助您体验使用向量索引查询带来的高效和快捷。
866 0
|
存储 SQL 关系型数据库
PostgreSQL插件HypoPG:支持虚拟索引
PostgreSQL插件HypoPG:支持虚拟索引
382 0
|
存储 缓存 关系型数据库
PostgreSQL 14新特性--减少索引膨胀
PostgreSQL 14新特性--减少索引膨胀
468 0
|
关系型数据库 PostgreSQL 索引
PostgreSQL通过索引获取heap tuple解析
PostgreSQL通过索引获取heap tuple解析
151 0
|
存储 SQL 关系型数据库
PostgreSQL的B-tree索引(下)
PostgreSQL的B-tree索引(下)
122 0