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分析将收集关于索引的统计信息,以便查询计划器能够确定使用哪个索引以及如何最佳地使用它。
最后用几句话来总结
部分索引仅存储筛选器指定的信息 部分索引可以非常具体 与传统索引相比,部分索引节省了空间
共享文件持续更新中,如有需要入群自取