调整查询代价的数据库PostgreSQL怎么用

技术调整查询代价的数据库PostgreSQL怎么用这篇文章将为大家详细讲解有关调整查询代价的数据库PostgreSQL怎么用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

本文将详细解释如何使用PostgreSQL,一个用于调整查询成本的数据库。文章内容质量较高,边肖将分享给大家参考。希望你看完这篇文章后有所了解。

大多数数据库无法在查询中更改成本评估的成本指数。假设我的系统从10,000 rpm磁盘换成可以提供每秒1366MB/S的老方法SSD查询评估,对数据库系统的查询性能有多大帮助?

PG在这方面的特殊功能是什么?让我们往下看。在此之前,我们还需要知道PG是这些数据库中唯一的一个,不能在语句中强制添加,也不能强制索引。

或者索引数据库。(pg_hint_plan可以解决这个问题)

以下是检查查询中成本的方法。

调整查询代价的数据库PostgreSQL怎么用

我们再深入一点。从下面两张图中我可以看出一些东西。在第一个图中,我们可以看到查询执行计划中的Starup成本为0。

调整查询代价的数据库PostgreSQL怎么用

以下查询的查询计划,启动成本,整体成本与启动成本相同。

调整查询代价的数据库PostgreSQL怎么用

实际上,总成本等于启动成本和运行成本。

调整查询代价的数据库PostgreSQL怎么用

另外,以第一列为例,顺序扫描没有启动成本,只有运行成本。

调整查询代价的数据库PostgreSQL怎么用

总费用是2235。这个2235是怎么来的?

调整查询代价的数据库PostgreSQL怎么用

让我看一下bloom_table占用的表行数和PAGE。

运行成本通过以下公式CPU运行成本磁盘的运行成本)*每页消耗多少行顺序扫描*多少页?

(0.01 0.0025) *100000 1.0 * 1235=1250 1235=2235

其中,0.01 0.0025 1分别来自上图。

seq_page_cost=1.0

cpu_tuple_cost=0.01

cpu_operator_cost=0.0025

,这意味着可以通过调整系统中的参数来改变一条语句的成本,其他数据库在这方面基本都是封闭的。

让我们看看如果我们离开指数,如何计算成本。

调整查询代价的数据库PostgreSQL怎么用

索引的成本将包括启动成本,从索引的第一个元组开始。

起始成本(索引)=舍入{log(2)(有多少个索引行)(Hindex 1) * 50} * CPU运行消耗

调整查询代价的数据库PostgreSQL怎么用

相关消耗=四舍五入(log2 100000 (2 1)* 50)* 0.0025=0。

42 (约等于实际是0.4175)

这里面有两个问题,1 HINDEX 到底是这么来的,这里面指的是索引的树高,其实可以通过这个公式来推出你的索引树有多高

运行的代价  (索引使用的CPU 代价 + 表使用CPU的代价) + (index_io 代价 + 表的io 代价)

在计算索引的代价中会涉及到选择率的问题,意思就是查询的谓词的频率的估计。

下面就是通过SQL 语句来给出每行的值来计算一个“采样率”的东西,也就是告诉你,这个行的值在整体的表中的占比。

调整查询代价的数据库PostgreSQL怎么用

这里由于计算比较麻烦,就不进行计算了,但这里需要注意的是

random_page_cost = 4.0 ,这个是在查询中使用索引计算 index_io_cost的一个标量,通过选择率 * index的page的数量 * random_page_cost 就可以得出索引的io cost ,而到底是走索引还是走全表扫描,执行计划会进行比对,如果走全表扫描会计算最小和最大的io cost,例如最大的 io_cost = 页面的数量 * random_page_cost 

所以调整 random_page_cost 的值会影响到底是走索引还是走全表扫描的选择性。 

下面可以举一个例子,我将配置文件中的random_page_cost 和 cpu_index_tuple_cost 进行调整,一个调小 一个调大,可以看到下图的结果,就算我有10万条记录,并且我查询的条件中的字段10万条那条都和那条不一样,并且也建立了相关的索引,最终的结果还是进行了全表扫描。

调整查询代价的数据库PostgreSQL怎么用

在将两个参数还原后,还是继续走原来的索引

调整查询代价的数据库PostgreSQL怎么用

说了这么多其实回到我开头说的问题,如果你的磁盘系统已经更改到SSD 磁盘则你的某些值是需要改变,否则可能会出现一些明明索引很好,但他选择全表扫描的情况。

关于调整查询代价的数据库PostgreSQL怎么用就分享到这里了,希望

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/129607.html

(0)

相关推荐

  • 4.运算符和流程控制

    技术4.运算符和流程控制 4.运算符和流程控制运算符
    在 PHP 中,赋值运算符 = 用于给变量赋值。
    在 PHP 中,算术运算符 + 用于把值加在一起
    1.算数运算符运算符
    名称
    描述
    实例
    结果x

    礼包 2021年12月23日
  • zookeeper提供哪些功能(zookeeper在哪些技术中有用到)

    技术ZooKeeper核心原理及应用场景是什么这篇文章将为大家详细讲解有关ZooKeeper核心原理及应用场景是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。为什么会

    攻略 2021年12月24日
  • SQL中DDL操作的示例分析

    技术SQL中DDL操作的示例分析这篇文章给大家分享的是有关SQL中DDL操作的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、数据库对象 表 视图:存储在数据字典中的一条

    攻略 2021年12月13日
  • Flex开发者需要了解哪些事情

    技术Flex开发者需要了解哪些事情这篇文章主要介绍了Flex开发者需要了解哪些事情,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Flex开发者需要知道的1

    攻略 2021年12月4日
  • Does RSA Private key always contain the Public key, or is it just .NET

    技术Does RSA Private key always contain the Public key, or is it just .NET Does RSA Private key always

    礼包 2021年12月9日
  • excel函数的使用方法,Excel替换函数的使用方法

    技术excel函数的使用方法,Excel替换函数的使用方法可以根据以下6个步骤操作excel函数的使用方法:方法/步骤1:SUBSTITUTE函数格式为:SUBSTITUTE(text,old_text,new_text

    生活 2021年11月1日