当前位置:首页 > SEO优化 > 正文

shell命令(nslookup命令)

  

  

  在PostgreSQL中,可以通过“解释”命令查看SQL的执行计划,其中Cost的表达式与Oracle不同,值得注意。

  

  

  

  常用语句

  

  

  

  预先生成的执行计划

  

  

  

  一个

  

  

  

  皇家执行项目

  

  

  

  一个

  

  

  

  输出详细信息

  

  

  

  一个

  

  

  

  语法

  

  

  

  一个

  

  

  

  2

  

  

  

  选择权

  

  

  

  分析:执行语句和显示实时运行时间和其他统计信息,这将真正执行SQL语句;

  

  

  

  详细:显示附加信息,尤其是计划树中每个节点的字段列表、模式识别表和函数名。始终打印统计信息中显示的每个触发器的名称;

  

  

  

  成本:包括各计划节点的开办费估算和总成本消耗,以及行数和行宽的估算;

  

  

  

  缓冲区:使用信息,尤其包括共享块的命中、读取、脏和写入次数,本地块的命中、读取、脏和写入次数,临时块的读取和写入次数;

  

  

  

  定时:输出包括实际启动时间和每个节点花费的时间。在某些系统,重复读取系统块会显著降低查询速度,并且仅在同时启用了ANALYZE时才使用;

  

  

  

  格式:声明输出格式,可以是TEXT、XML、JSON或YAML,默认为TEXT;

  

  

  

  成本:第一个数字表示启动成本,即返回第一行需要多少成本值;第二个数字代表返回所有数据的成本。默认成本值如下

  

  

  

  按顺序扫描数据块,成本值设置为1

  

  

  

  随机扫描一个数据块,成本值设为4

  

  

  

  处理一条数据线的中央处理器成本为0.01

  

  

  

  处理一条指数线的中央处理器成本为0.005

  

  

  

  每个操作员的中央处理器成本是0.0025

  

  

  

  行:指示将返回多少行

  

  

  

  宽度:表示每行的平均宽度是多少字节

  

  

  

  缓冲

  

  

  

  共享命中:在共享内存中直接读取xxx块。

  

  

  

  Read:表示已经从磁盘读取了xxx个块

  

  

  

  作者:作家xxx块

  

  

  

  序列扫描:全表扫描

  

  

  

  索引扫描:索引扫描

  

  

  

  位图堆扫描:位图扫描

  

  

  

  过滤器:条件过滤

  

  

  

  Nestloop Join:当两个表连接时,嵌套循环连接由内部表和外部表驱动。必须在内部表中搜索外部表返回的每一行,以找到与之匹配的行。因此,整个查询返回的结果集不应太大。返回子集小的表就当是外表,内表的连接字段要有索引,否则会慢。执行进程:

  

  

  

  确定一个驱动表(外部表),另一个表是内部表

  

  

  

  驱动表中的每一行就像一个嵌套循环,在内部表中有相应的记录JOIN

  

  

  

  哈希连接(Hash Join):使用两个表中较小的表,并使用连接键在内存中建立一个哈希表,然后扫描较大的表并探测哈希表,找出与哈希表匹配的行。适合一个小桌子可以完全放入内存的情况。如果表太大,无法放入内存,优化会将其分成几个不同的分区,并将无法放入内存的部分写入磁盘的临时部分。

  

  

  

  合并连接:如果源数据上有索引,或者结果已排序,则无需在执行,对合并连接进行排序,合并连接的性能将优于哈希连接。

  

  

  

  参数名称类型指示enable_seqscanboolean是否选择全表顺序扫描。其实不能完全禁止全表扫描,但是关闭这个变量会让优化在有其他方法的时候选择其他方法,比如enable_indexscanboolean,是否选择index scan enable _ bitmapscanboolean,是否选择位图扫描enable_tidscanboolean,位图扫描enable _ nestloopboolean时是否选择嵌套循环连接多表连接。如果它被设置为“关”,当执行计划只采取一条路径的嵌套循环连接时,优化只能选择这条路径,但如果有其他连接方法,优化将优先考虑其他方法。Enable_hashjoinboolean多表连接,是否选择hash连接enable_mergejoinboolean多表连接,Select merge connection enable _ hashaggboolean是否使用hash聚合enable _ sort boolean是否使用显式排序,如果设置为“off”,当执行计划中只有一种排序方式时,优化只能选择这种方式,但如果有其他连接方式,优化会优先选择其他方式。参数名称类型描述在序列_页_成本浮动执行计划中按顺序访问数据块页的成本。默认值为1.0 random _ page _ cost float。随机访问块页面的成本在执行计划中计算。默认值是4.0 CPU _ tuple _ costfloat,它计算执行计划中处理的一个数据行的成本。默认值为0.01 CPU _ index _ tuple _ costfloat,用于计算执行计划中处理的一个索引行的成本。系统默认值

  

为 0.005cpu_operator_costfloat执行计划中执行一个操作符或函数的开销。默认为 0.0025effective_cache_sizeint执行计划中在一次索引扫描中可用的磁盘缓冲区的有效大小。在计算一个索引的预计开销值时会对这个参数加以考虑。更高的数值会导致更可能使用索引扫描,更低的数值会导致更有可能选择顺序全表扫描。默认是 16384 个数据块大小,即 128 MB。

  

    基因查询优化(GEQO)是一个使用探索式搜索来执行查询规划的算法,它可以降低负载查询的规划时间。GEQO 的检索是随机的,因此它生成的执行计划可能会有不确定性。

  

    参数名称类型说明geqointeger允许或禁止基因查询变化,在生产系统中最好把此参数打开,默认是打开的。geqo_threshold 参数提供了一种是否使用基因查询优化方法的更惊喜的控制方法geqo_thresholdinteger只有当涉及的 FROM 关系数量至少有这么多个时,才是用基因查询优化。对于数量小于此值的查询,规划器做判断要花很多时间。默认是 12。一个 FULL OUTER JOIN 只算一个 FROM 项。geqo_effortinteger控制 GEQO 里规划时间和查询规划有效性之间的平衡。这个变量必须是一个从 1 到 10 的整数。默认值是 5。大的数值增加花在进行查询规划上面的时间,但是也很可能提高选中更有效的查询规划的几率。geqo_pool_sizeinteger控制 GEQO 使用的池大小。池大小是基因全体中的个体数量,它必须至少是 2,有用的数值通常在 100 到 1000 之间。如果把它设置为 0(默认值),那么就会基于 geqo_effort 和查询中表的数量选取一个合适的值geqo_generationsinteger控制 GEQO 使用的子代数目。子代的意思是算法的迭代次数。它必须至少是 1,有用值的范围和池大小相同。如果设置为 0(默认值),那么将基于 geqo_effort 选取合适的值。geqo_selection_biasfloat控制 GEQO 使用的选择性偏好。选择性偏好是指在一个种群中的选择性压力。数值可以是 1.5 到 2.0 之间,默认值是 2.0geqo_seedfloat控制 GEQO 使用的随机数产生器的初始值,用以选择随机路径。这个值可以从 0(默认值)到 1.修改这个值会改变连接路径搜索的设置,同时会找到最优或最差路径参数名称类型说明default_statistics_targetenum此参数设置表字段的默认直方图统计目标值,如果表字段的直方图统计目标值没有用 ALTER TABLE SET STATISTICS 明确设置过,则使用此参数指定的值。此值越大,ANALYZE 需要花费越多的时间,同时统计出的直方图信息越详细,这样生成的执行计划也越准确。默认值是 100,最大值是 10000constraint_exclusionfloat

  

    指定执行计划中是否使用约束排除。可以取三个值:partition、on、off。默认值为 partition。约束排除就是指优化器分析 where 中的过滤条件与表上的 check 约束。

  

    当优化器使用约束排除时,需要花更多的时间去对比约束条件和 where 中的过滤条件,在多数情况下,对无继承的表打开约束排除意义不大,所以 PostgreSQL 把此值默认设置为 partition。当对一张表做查询时,如果这张表有很多继承的子表,通常也需要扫描这些子表,设置为“partition”,优化器就会对这些子表做约束排除分析

  

    cursor_tuple_fractionfloat

  

    游标在选择执行计算时有两种策略:第一种是选择总体执行代价最低的,第二种是返回第一条记录时代价最低的。有时总体执行代价最低,但返回第一条记录到代价不是最低,这是返回给用户的第一条记录的时间比较长,这会让用户觉得等待较长的时间,系统才有相应,导致用户体验不太好。为了让用户体验比较好,可以选择返回第一条记录最快的执行计划,这时用户可以比较快地看到第一条记录。

  

    设置游标,在选择总体代价最低的执行计划和返回第一条记录代价最低的执行计划两者之间,比较倾向性的大小。默认值是 0.1。最大值是 1.0,此时游标会选择总体代价最低的执行计划,而不考虑多久才会输出第一个行

  

    from_collapse_limitinteger默认值是 8。如果查询重写生成的 FROM 后的项目数不超过这个限制数目,优化器将把子查询融合到上层查询。小的数值可缩短规划的时间,但是可能会生成差一些的执行计划。将这个值设置得与配置项 geqo_threshold 的数值相同或更大,可能触发使用 GEQO 规划器,从而产生不确定的执行计划join_collapse_limitinteger如果查询重写生成的 FROM 后的项目数不超过这个限制数目,优化器把显式使用 JOIN 子句(不包括 FULL JOIN)的连接也重写到 FROM 后的列表中。小的数值可缩短规划的时间,但是可能会生成差一些的查询计划值。默认值与 from_collapse_limit 一样。将这个值设置得与配置项 geqo_threshold 的数值相同或更大,可能触发使用 GEQO 规划器,从而产生不确定的执行计划

  

    在加上 ANALYZE 选项后,会真正执行实际的 SQL,如果 SQL 语句是一个插入、删除、更新或 CREATE TABLE AS 语句,这些语句会修改数据库。为了不影响实际的数据,可以吧 EXPLAIN ANALYZE 放到一个事务中,执行完后回滚事务,如下:

  

    1

  

    2

  

    3

有话要说...