原文:http://blog.csdn.net/hantiannan/article/details/4517192
原文链接:https://www.f2er.com/postgresql/195734.htmlPostgresqlsql的性能调试 |
利用pgAdmin中的自带的 |
这个工具也是Postgresql主打的调试工具。 |
1.下面简单介绍一下执行计划结果的读法 |
①Explaining → Widths |
=# EXPLAIN SELECT oid FROMpg_proc; QUERY PLAN ------------------------------------------ Seq Scan on pg_proc (cost=0.00..87.47 rows=1747 width=4) |
查询结果的所有字段的总宽度。这个参数并不是关键指标。每个字段的宽度定义如下: varchar(n):n+1 char(n):n+1 |
②Explaining → Rows |
③Explaining → Cost |
cost是比较重要的指标。例子中的cost=0.00..87.47有两个部分,启动时间(startup)=0.00和总时间(total)=87.47。单位是毫秒。这个指标也只是预测值。 |
启动时间也有解释为找到符合条件的第一行所花的时间。 |
④Explaining → Explain Analyze |
=# EXPLAIN ANALYZE SELECT oid FROM pg_proc; QUERY PLAN ------------------------------------------ Seq Scan on pg_proc (cost=0.00..87.47 rows=1747 width=4) (actual time=0.077..17.082 rows=1747 loops=1) Total runtime: 20.125 ms |
⑤Explaining → 执行计划运算类型 |
|
下面是一个hash,hash join例子: =# EXPLAIN SELECT relname,nspname FROM pg_class JOIN pg_namespace ON (pg_class.relnamespace=pg_namespace.oid); QUERY PLAN ------------------------------------------------------------------------ Hash Join (cost=1.06..10.71 rows=186 width=128) 两个表间 |
下面是一个Nested Loop例子: =# SELECT * FROM pg_foo JOIN pg_namespace ON (pg_foo.pronamespace=pg_namespace.oid); QUERY PLAN ---------------------------------------------------------------------- Nested Loop (cost=1.05..39920.17 rows=5867 width=68) 两个表间 |
下面是对表关联的3种结合运算的概念图。 sql |
因为做的哈希表内存装不下,需要输出到硬盘,这样IO读取多了,速度就低下了。 还有可能不如循环结合快。 这个要具体问题具体分析。 |
2. |
执行 |
通过 |