PostgreSQL(三)索引&执行计划
来源:互联网 发布:网络语音对讲系统 编辑:程序博客网 时间:2024/06/05 17:27
索引:
-------------------------------创建索引-------------------------------https://www.postgresql.org/docs/current/static/sql-createindex.htmlCREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] name ] ON table_name [ USING method ] ( { column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] ) [ WITH ( storage_parameter = value [, ... ] ) ] [ TABLESPACE tablespace_name ] [ WHERE predicate ]CONCURRENTLY :创建索引默认情况是锁表只读,CONCURRENTLY 允许执行DML,但会花更多些时间。在线创建索引都会创建一个快照保留索引之前的数据,且创建索引也会加到CPU和IO的开销。创建过程如果死锁或唯一冲突导致失败,可能生成一个无效索引。USING method : btree(默认), hash, gist, spgist, gin, brin可参考:PostgreSQL 9种索引的原理和应用场景(https://yq.aliyun.com/articles/111793)检查索引是否无效(INVALID):postgres=# \d tab Table "public.tab" Column | Type | Collation | Nullable | Default --------+---------+-----------+----------+--------- col | integer | | | Indexes: "idx" btree (col) INVALID--创建索引CREATE UNIQUE INDEX CONCURRENTLY IF NOT EXISTS ix_weather01 ON weather USING btree (city COLLATE pg_catalog."default" varchar_pattern_ops ASC NULLS FIRST)WITH (fillfactor = 90)TABLESPACE pg_defaultWHERE city is not null;postgres=# \d weather#查看索引\di\di ix_weather01;\d+ ix_weather01;SELECT * FROM pg_indexes WHERE tablename='weather';SELECT * FROM pg_statio_all_indexes WHERE relname='weather';#查看索引大小SELECT pg_size_pretty(pg_relation_size('ix_weather01')); SELECT indexname,pg_size_pretty(pg_relation_size(cast(indexname as varchar))) as size FROM pg_indexes WHERE schemaname='public';-------------------------------#更改索引ALTER INDEX [ IF EXISTS ] name RENAME TO new_nameALTER INDEX [ IF EXISTS ] name SET TABLESPACE tablespace_nameALTER INDEX name DEPENDS ON EXTENSION extension_nameALTER INDEX [ IF EXISTS ] name SET ( storage_parameter = value [, ... ] )ALTER INDEX [ IF EXISTS ] name RESET ( storage_parameter [, ... ] )ALTER INDEX ALL IN TABLESPACE name [ OWNED BY role_name [, ... ] ] SET TABLESPACE new_tablespace [ NOWAIT ]#更改索引属性ALTER INDEX ix_weather01 RENAME TO ix_weather;ALTER INDEX ix_weather SET TABLESPACE pg_default;ALTER INDEX ix_weather SET (fillfactor = 80); ALTER INDEX ix_weather RESET (fillfactor); ALTER INDEX ALL IN TABLESPACE pg_default SET TABLESPACE ts_user01 NOWAIT;#重建索引REINDEX [ ( VERBOSE ) ] { INDEX | TABLE | SCHEMA | DATABASE | SYSTEM } name REINDEX INDEX ix_weather;REINDEX TABLE weather;REINDEX SCHEMA public;REINDEX DATABASE testdb;REINDEX SYSTEM hzc;#删除索引DROP INDEX [ CONCURRENTLY ] [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]DROP INDEX ix_weather;
执行计划:
#查看执行计划# https://www.postgresql.org/docs/current/static/sql-explain.htmlEXPLAIN [ ( option [, ...] ) ] statementEXPLAIN [ ANALYZE ] [ VERBOSE ] statementoption: ANALYZE [ boolean ]--显示实际执行实际和其他统计信息。默认:FALSE VERBOSE [ boolean ]--输出执行计划相关的额外信息。默认:FALSE COSTS [ boolean ]--输出每个节点估计开销、行数、行宽。默认:TRUE BUFFERS [ boolean ]--缓存信息。块的命中、读写情况,ANALYZE 启用时才有用。默认:FALSE TIMING [ boolean ]--实际的时间,ANALYZE 启用时才有用。默认:FALSE SUMMARY [ boolean ]--概要信息,如总时间等。 FORMAT { TEXT | XML | JSON | YAML } --定义输出格式。默认:TEXT# EXPLAIN SELECT * FROM weather WHERE city='San Francisco'; QUERY PLAN --------------------------------------------------------- Seq Scan on weather (cost=0.00..1.04 rows=1 width=194) Filter: ((city)::text = 'San Francisco'::text)(2 rows)### EXPLAIN ANALYZE SELECT * FROM weather WHERE city='San Francisco'; QUERY PLAN --------------------------------------------------------------------------------------------------- Seq Scan on weather (cost=0.00..1.04 rows=1 width=194) (actual time=0.011..0.012 rows=1 loops=1) Filter: ((city)::text = 'San Francisco'::text) Rows Removed by Filter: 2 Planning time: 0.050 ms Execution time: 0.023 ms(5 rows)### EXPLAIN (ANALYZE ON,TIMING ON) SELECT * FROM weather WHERE city='San Francisco'; QUERY PLAN --------------------------------------------------------------------------------------------------- Seq Scan on weather (cost=0.00..1.04 rows=1 width=194) (actual time=0.007..0.008 rows=1 loops=1) Filter: ((city)::text = 'San Francisco'::text) Rows Removed by Filter: 2 Planning time: 0.048 ms Execution time: 0.021 ms(5 rows)### EXPLAIN (FORMAT JSON) SELECT * FROM weather WHERE city='San Francisco'; QUERY PLAN ---------------------------------------------------------- [ + { + "Plan": { + "Node Type": "Seq Scan", + "Parallel Aware": false, + "Relation Name": "weather", + "Alias": "weather", + "Startup Cost": 0.00, + "Total Cost": 1.04, + "Plan Rows": 1, + "Plan Width": 194, + "Filter": "((city)::text = 'San Francisco'::text)"+ } + } + ](1 row)## 其他示例参考:https://www.postgresql.org/docs/current/static/using-explain.html#using-explain-basics
阅读全文
0 0
- PostgreSQL(三)索引&执行计划
- postgresql 执行计划理解
- PostgreSQL执行计划
- postgresql 执行计划理解
- Postgresql执行计划学习
- PostgreSQL执行计划的解释
- PostgreSQL的执行计划分析
- PostgreSQL执行计划的解释
- PostgreSQL的执行计划分析
- PostgreSQL的执行计划分析
- PostgreSQL执行计划的解释
- PostgreSQL执行计划的解释
- 执行计划---索引扫描
- 循环 执行计划 索引
- 数据库索引 + 执行计划
- mysql explain执行计划详解(查看索引执行)
- PostgreSql的执行计划1--获取执行计划
- oracle 分区 索引 执行计划
- Android插件化学习之路(五)之代理Activity
- Openstack中更新表结构:修改表的某个字段使之可以为空
- jupyter notebook 执行结果与pythonIDE执行不一样
- VMware突然出现虚拟机不能上网,但主机能够上网
- 做一个完整的Java Web项目需要掌握的技能
- PostgreSQL(三)索引&执行计划
- 遍历Map的四种方法
- wamp修改数据库默认密码时出现ERROR 1054 (42S22): Unknown column 'password' in 'field list'
- vue data恢复初始化数据
- nginx recv() failed 错误,php "zend_mm_heap corrupted\n"错误
- linux常用命令
- Selenium IDE 和 FireFox 兼容问题
- getChildFragmentManager
- [Redis学习笔记]-Spring 操作Redis