加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

10 个你不知道的 PostgreSQL 功能

发布时间:2018-09-16 19:52:49 所属栏目:MySql教程 来源:开源中国编译
导读:技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战 英文原文:The Postgres 10 feature you didn't know about: CREATE STATISTICS 如果你曾使用 Postgres 做过一些性能优化,你或许已经使用过 EXPLAIN 。EXPLAIN 向你展示了 Postgre

这些单列统计信息可帮助 planner 估算你的条件选择性(这是 planner 用来估算索引扫描将选择多少行的内容)。 当查询中存在多个条件时,planner 假定列(或 where 子句条件)彼此独立。 当列相互关联或相互依赖并导致 planner 低估或高估这些条件将返回的行数时,就不适用。

我们来看下面的几个例子。 为了使查询计划易于阅读,我们通过设置 max_parallel_workers_per_gather  为 0 来关闭每个查询的并行性:

  1. EXPLAIN ANALYZE SELECT * FROM tbl where col1 = 1;                             
  2.                                                 QUERY PLAN                                                  
  3. ----------------------------------------------------------------------------------------------------------- 
  4.  Seq Scan on tbl  (cost=0.00..169247.80 rows=9584 width=8) (actual time=0.641..622.851 rows=10000 loops=1) 
  5.    Filter: (col1 = 1) 
  6.    Rows Removed by Filter: 9990000 
  7.  Planning time: 0.051 ms 
  8.  Execution time: 623.185 ms 
  9. (5 rows) 

正如你看到的那样,planner 估计 col1 的值为 1 的行数是 9584 ,而查询返回的实际行数是 10000 ,所以相当准确。

当你在 column 1 和 column 2 都包含过滤器时会发生什么情况。

  1. EXPLAIN ANALYZE SELECT * FROM tbl where col1 = 1 and col2 = 0;                             
  2.                                                 QUERY PLAN                                                 
  3. ---------------------------------------------------------------------------------------------------------- 
  4.  Seq Scan on tbl  (cost=0.00..194248.69 rows=100 width=8) (actual time=0.640..630.130 rows=10000 loops=1) 
  5.    Filter: ((col1 = 1) AND (col2 = 0)) 
  6.    Rows Removed by Filter: 9990000 
  7.  Planning time: 0.072 ms 
  8.  Execution time: 630.467 ms 
  9. (5 rows) 

(编辑:辽源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读