POSTGRESQL Partial Indexes 数据库优化 与 Explain 执行计划展示

2020-06-04 15:23:53 浏览数 (1)

EXPLAIN 是每个数据库都有的东西,可能表达的方式不同,但根本就是要看到你无论是简单的只有一块”巴掌”大小的“文明布” 的语句, 还是“棉裤套皮裤,在套上皮裤衩”的SQL, 都能明明白白的给你拆解成一行行的解释,掰开揉碎的告诉你的SQL 是 经典,还是垃圾。

Postgresql的EXPLAIN 又是如何,与其他的数据库比较孰高孰低,我们往下看。

在POSTGRESQL 中有

explain 和 explain analyze 的方式来,其中的区别是前者是评估,后者是实际执行计划。

下面是大致的执行的中显示的注解

POSTGRESQL 的EXPLAIN 和 EXPLAIN ANALYZE 在显示执行计划方面与其他数据库在同一水平线。

那今天的”猪脚“ Partial Indexes 到底和优化有什么关系,我们下面有一个表,其中和客户的的payment 有关。

我们的业务逻辑是这样,这张表中存储着整体用户在公司产品的消费记录,而需要定期来统计,某几位(大客户)消费的金额总数语句如下

explain analyze select sum(amount) from payment where customer_id in (341,343) group by customer_id;

下面第一个是建立了 partical index 从图中看,对比删除了 partical index 使用正常的索引来看,在 cost 和 时间上均有一些变化,partical 使用的时间和COST 要小于 index 整体。

而实际当中partical index 的意义更在于在提高查询的速度的情况下,节省了索引存储的数据空间,例如多列值的索引,这样就可以根据查询建立返回数据匹配列的索引,而不再需要回表提供数据,并且在UPDATE 数据的情况下会产生锁的可能会因为锚定索引数据的比率而降低(只会比传统索引降低,持平的情况都会比较少)。

不光如此,如果partical index 建立的索引的针对性(针对数据的在总体数据的比率)更小例如查询的数据只占整体数据的 百分之 2% 则遇到需要索引遍历查询的情况,就会比建立全部索引的情况要节省 98%的时间。

另外与普通索引不同,在创建partical 索引的情况下 需要analyze分析将收集关于索引的统计信息,以便查询计划器能够确定使用哪个索引以及如何最佳地使用它。

最后用几句话来总结

部分索引仅存储筛选器指定的信息 部分索引可以非常具体 与传统索引相比,部分索引节省了空间

共享文件持续更新中,如有需要入群自取

0 人点赞