首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

PostgreSQL中的SQL JOIN - WHERE子句中的执行计划与ON子句中的执行计划不同

PostgreSQL中的SQL JOIN是用于将两个或多个表中的行组合在一起的操作。在JOIN操作中,通常使用WHERE子句或ON子句来指定连接条件。

执行计划是数据库查询优化器生成的查询执行方案。它描述了查询的逻辑操作、数据读取方式以及连接操作的执行顺序等细节,以提高查询性能。

在SQL JOIN中,WHERE子句和ON子句的执行计划可能会有所不同。具体的区别如下:

  1. WHERE子句中的执行计划:
    • WHERE子句是在表连接后应用的过滤条件。
    • WHERE子句中的条件会在表连接之后对连接的结果进行过滤。
    • WHERE子句中的条件可以包含任何列,并且可以使用各种比较操作符和逻辑运算符。
  • ON子句中的执行计划:
    • ON子句是在表连接时指定的连接条件。
    • ON子句中的条件会在表连接时对连接的行进行匹配。
    • ON子句中的条件通常只包含连接列,并且使用比较操作符进行匹配。

通常情况下,使用ON子句指定连接条件更为直观和规范,因为它们明确地表示了表之间的关系。而使用WHERE子句来过滤连接结果,则在性能上可能会有所不同。

对于这个问题,针对PostgreSQL中的SQL JOIN - WHERE子句中的执行计划与ON子句中的执行计划不同的情况,建议的腾讯云相关产品是腾讯云数据库PostgreSQL。腾讯云数据库PostgreSQL是腾讯云提供的一种关系型数据库服务,完全兼容开源的PostgreSQL数据库。它提供了高可用、高性能、高安全性的数据库解决方案,适用于各种规模的应用场景。

腾讯云数据库PostgreSQL产品介绍链接地址:https://cloud.tencent.com/product/cdb-postgres

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

sql句中wherehaving区别

Where 是一个约束声明,使用Where约束来自数据库数据,Where是在结果返回之前起作用Where不能使用聚合函数。...Having是一个过滤声明,是在查询返回结果集以后对查询结果进行过滤操作,在Having可以使用聚合函数。...一来,我们要使用聚合语句 avg ;二来,我们要对聚合后结果进行筛选( average > 3000 ),因此使用 where 会被告知 sql 有误。...例2:要查询每个部门工资大于3000员工个数 sql语句应为: select deparment, count(*) as c from salary_info where salary >...3000 group by deparment 此处 where 不可用 having 进行替换,因为是直接对库数据进行筛选,而非对结果集进行筛选。

1.6K20

T-SQL进阶:超越基础 Level 2:编写查询

在“超越基础”楼梯这个层次上,我将讨论一个查询不同方面,在将来一个层面上,我将讨论相关查询。 什么是查询? 查询只是一个SELECT语句,它包含在另一个Transact-SQL句中。...Transact-SQL句中有许多不同地方,需要一个查询来返回单个列值,例如在选择列表WHERE子句等。...[SalesOrderHeader] WHERE OrderDate = '2007-02-19 00:00:00.000'; 清单1:列列表查询 在这个单一Transact-SQL句中,您会看到两个不同...另外我查看了SQL Server为这两个查询创建执行计划。 我发现SQL Server为两者生成了相同执行计划。...当查询用于FROM子句时 当IN子句中使用查询时 当表达式中使用查询时 当查询比较运算符一起使用时 问题3: 在WHERE句中使用一个查询Transact-SQL语句总是比不包含查询(

6K10
  • MySQL SQL引擎很差吗? 由一个同学提出问题引出实验

    有了PostgreSQL出现,MySQL数据库在SQL处理上问题一直被人当做有意思事情来去谈论,实际上每种数据库有自己不同个性,我们掌握就好,无需特别的进行一些情感上好恶。...,但是相关语句执行计划完全不同。...left join条件对接到查询,这里可以看到查询得出数据一定是一条数据,否则语句就会报错。...而反观我们不在使用查询撰写语句在执行计划并未有重复日志数据过滤,并且从执行时间上看,也要比查询方式查询速度要快。...1 在MySQL如果可以将查询改为连接查询,尽量改为连接查询 ,通常连接查询被正确翻译并走更优执行计划可能性更高。

    13010

    性能优化之查询转换 - 查询类

    ) from t_users ); 执行计划如下: 注:在这个语句中,我们通过提示强制不使用查询推进技术。...=o.owner and t.table_name=o.object_name); 执行计划如下: 在这个示例,对EXISTS查询进行了解嵌套,然后选择了半连接(SEMI JOIN关联方式。...=o.owner and t.table_name=o.object_name); 执行计划如下: 在这个示例,对NOT EXISTS查询进行了解嵌套,然后选择了反连接(ANTI JOIN关联方式...3 查询分解 查询分解是由WITH创建复杂查询语句并存储在临时表,可按照一般表相同方式使用该临时表功能。...执行计划如下: 在这个查询语句中,外部查询要满足两个子查询—SUB1和SUB2,但两者条件不同,不能简单合并。

    1.5K61

    SQL 优化极简法则,还有谁不会?

    执行计划(execution plan,也叫查询计划或者解释计划)是数据库执行 SQL 语句具体步骤,例如通过索引还是全表扫描访问表数据,连接查询实现方式和连接顺序等。...(Materialization)技术,将查询结果生成一个内存临时表;然后 employee 表进行连接。...以上示例在 Oracle 和 SQL Server 中会自动执行查询展开,两种写法效果相同;在 PostgreSQL MySQL 类似,第一个语句使用 Nested Loop Join,改写为...另外,对于 IN 和 EXISTS 查询也可以得出类似的结论。由于不同数据库优化器能力有所差异,我们应该尽量避免使用查询,考虑使用 JOIN 进行重写。...这是因为左外连接会返回左表全部数据,即使 ON 子句中指定了员工姓名也不会生效;而 WHERE 条件在逻辑上是对连接操作之后结果进行过滤。

    1.2K20

    SQL 优化极简法则,你掌握几个?

    如果 SQL 语句性能不够理想,我们首先应该查看它执行计划,通过执行计划(EXPLAIN)确保查询使用了正确索引。...(Materialization)技术,将查询结果生成一个内存临时表;然后 employee 表进行连接。...以上示例在 Oracle 和 SQL Server 中会自动执行查询展开,两种写法效果相同;在 PostgreSQL MySQL 类似,第一个语句使用 Nested Loop Join,改写为...另外,对于 IN 和 EXISTS 查询也可以得出类似的结论。由于不同数据库优化器能力有所差异,我们应该尽量避免使用查询,考虑使用 JOIN 进行重写。...这是因为左外连接会返回左表全部数据,即使 ON 子句中指定了员工姓名也不会生效;而 WHERE 条件在逻辑上是对连接操作之后结果进行过滤。

    1.1K10

    【MySQL系列】- MySQL执行计划一览

    什么是执行计划 根据表、列、索引和WHERE句中条件详细信息,MySQL优化器考虑了许多技术来有效地执行SQL查询涉及查找。...执行计划能做什么 通过执行计划我们可以知道MySQL 是如何处理你 SQL 语句。...驱动表被驱动表:A表和B表join连接查询,如果通过A表结果集作为循环基础数据,然后一条一条地通过该结果集中数据作为过滤条件到B表查询数据,然后合并结果。...IN查询查询语句中,如果查询优化器决定将IN查询转换为EXISTS 查询,而且查询可以使用到主键进行等值匹配的话,那么该查询执行计划 type 列值就是 unique_subquery...同时,了解执行计划在工作也能更好SQL查询进行优化,所以执行计划是mysql学习过程一个必备技能,来充实一下自己技能包。

    74320

    SQL简单优化思路

    在编写SQL查询时,优化查询性能是一个重要考虑因素,特别是在处理多表连接(JOIN)和查询时。...优化WHERE子句 避免在WHERE句中使用复杂表达式:复杂表达式可能会导致索引失效,尽量将逻辑分解到应用层处理。...使用索引列作为WHERE条件:确保WHERE句中列上有索引,这样可以利用索引来快速定位数据。 避免在WHERE句中使用函数:使用函数会导致索引失效,尽量将函数移动到SELECT列表。...查询使用 避免在WHERE句中使用查询:查询通常会导致数据库执行额外扫描,如果可能,尝试使用JOIN来替代子查询。...适当数据模型设计可以减少JOIN操作数量,从而提高查询性能。 通过上述技巧和最佳实践,你可以在编写多表JOIN查询时提高SQL查询性能。

    14810

    Mysql慢sql优化

    查询序列号,标识执行顺序 id 相同,执行顺序由上至下 id 不同,如果是查询,id 序号会递增,id 值越大优先级越高,越先被执行 执行计划 select_type 查询类型,主要是用于区分普通查询...表示在 select 或 where 列表包含了查询,MATERIALIZED:表示 where 后面 in 条件查询 UNION:表示 union 第二个或后面的 select 语句 UNION...Using join buffer (Block Nested Loop):表示 SQL 操作使用了关联查询或者查询,且需要进行嵌套循环计算。...,改写成UNION形式再试图索引匹配。...常见简化规则如下:不要有超过5个以上表连接(JOIN),考虑使用临时表或表变量存放中间结果。少用查询,视图嵌套不要过深,一般视图嵌套不要超过2个为宜。

    10510

    SQL优化极简法则,还有谁不会?

    如果 SQL 语句性能不够理想,我们首先应该查看它执行计划,通过执行计划(EXPLAIN)确保查询使用了正确索引。...(Materialization)技术,将查询结果生成一个内存临时表;然后 employee 表进行连接。...以上示例在 Oracle 和 SQL Server 中会自动执行查询展开,两种写法效果相同;在 PostgreSQL MySQL 类似,第一个语句使用 Nested Loop Join,改写为...另外,对于 IN 和 EXISTS 查询也可以得出类似的结论。由于不同数据库优化器能力有所差异,我们应该尽量避免使用查询,考虑使用 JOIN 进行重写。...这是因为左外连接会返回左表全部数据,即使 ON 子句中指定了员工姓名也不会生效;而 WHERE 条件在逻辑上是对连接操作之后结果进行过滤。

    1K20

    POSTGRESQL 执行计划,条件值变化会导致查询计划改变吗? (6)

    这是一个系列,主要关于POSTGRESQL 数据库SQL 有关优化,目前已经写到了第6篇。...7 refresh materialized view 8 execute 针对这些操作会将DML 与其他语句分开,POSTGRESQL 通过操作系统工具,Lexyacc来进行相关工作,...对于SQL关键字进行标识,并将其发送给分析器通过分析器里面的语法规则通过触发方式工作。...,语句重写会重写成一种方式,这样在后期生成执行计划就会避免一些问题,数据库优化引擎工作也会更加准确,而不会造成语句中条件必须要有顺序撰写。...3*3*9 108种, 如果再有一些WHERE条件,分分钟可以突破4位数执行计划方案。

    1.5K30

    解析SQL句中Replace INTOINSERT INTO不同之处--Java学习网

    REPLACE运行INSERT很相似。只有一点例外,假如表一个旧记录一个用于PRIMARY KEY或一个UNIQUE索引新记录具有相同值,则在新记录被插入之前,旧记录被删除。...该语句会与INSERT相同,因为没有索引被用于确定是否新行复制了其它行。 所有列值均取自在REPLACE语句中被指定值。所有缺失列被设置为各自默认值,这和INSERT一样。...如果表包含多个唯一索引,并且新行复制了在不同唯一索引不同旧行值,则有可能是一个单一行替换了多个旧行。...如果您正在使用C API,则可以使用mysql_affected_rows()函数获得受影响行数。 目前,您不能在一个查询,向一个表更换,同时从同一个表中选择。...从表删除含有重复关键字值冲突行 b.

    1.1K20

    高效sql性能优化极简教程

    优化流程设计 优化sql语句 优化物理结构 优化内存分配 优化I/O 优化内存竞争 优化操作系统 四,sql优化过程 定位有问题语句 检查执行计划 检查执行计划优化器统计信息 分析相关表记录数...解析(PARSE): 检查语法 检查语义和相关权限 在共享池中查找sql语句 合并(MERGE)视图定义和查询 确定执行计划 绑定(BIND) 在语句中查找绑定变量 赋值(或重新赋值) 执行(EXECUTE...) 应用执行计划 执行必要I/O和排序操作 提取(FETCH) 从查询结果返回记录 必要时进行排序 使用ARRAY FETCH机制 七,sql基本连接方式 表连接有几种?...(此时这样建表只是为了演示连接SQL语句,当然实际开发我们不会这样建表,实际开发这两个表会有自己不同主键。) 一、外连接 外连接可分为:左连接、右连接、完全外连接。...例如:下列sql条件语句中列都建有恰当索引,但几十万条数据下已经执行非常慢了: select * from record where amount/30<1000 (执行时间11s) 由于where

    3.3K50

    带你看懂MySQL执行计划

    前言: 前面文章,我们学习了 MySQL 慢日志相关内容,当我们筛选得到具体SQL 后,就要想办法去优化啦。优化 SQL 第一步应该是读懂 SQL 执行计划。...PRIMARY:查询如果包含查询或其他部分,外层 SELECT 将被标记为 PRIMARY。 SUBQUERY:查询第一个 SELECT。...range:对索引列进行范围查询,执行计划 key 列表示哪个索引被使用了。 index:查询遍历了整棵索引树, ALL 类似,只不过扫描是索引,而索引一般在内存,速度更快。...如果这一列为 NULL ,则表示没有可能用到索引;这种情况下,需要检查 WHERE句中所使用列,看是否可以通过给这些列某个或多个添加索引方法来提高查询性能。...Using join buffer (Block Nested Loop):连表查询方式,表示当被驱动表没有使用索引时候,MySQL 会先将驱动表读出来放到 join buffer ,再遍历被驱动表驱动表进行查询

    1.6K40

    【数据库设计和SQL基础语法】--索引和优化--查询优化基本原则

    避免在WHERE句中使用函数: 在WHERE句中使用函数可能导致无法使用索引,影响查询性能。尽量将函数应用于查询常数,而不是列。...* FROM orders INNER JOIN customers ON orders.customer_id = customers.customer_id; 避免使用查询: 在可能情况下,尽量避免使用查询...PostgreSQL EXPLAIN: PostgreSQL提供了EXPLAIN命令,可用于分析查询执行计划。...PostgreSQL pg_stat_statements: 用于跟踪和分析SQL查询统计信息。...例如,MySQL查询缓存、PostgreSQLHINT语法等。 以上是一些通用查询优化工具和技术,具体优化策略可能会根据数据库系统、应用场景和业务需求不同而有所变化。

    53510

    如何定位及优化SQL语句性能问题

    在CRUD操作,最最常用也就是Read操作了。而对于不同表结构,采用不同SQL语句,性能上可能千差万别。本文,就基于MySql数据库,来介绍一下如何定位SQL语句性能问题。...对于低性能SQL语句定位,最重要也是最有效方法就是使用执行计划。...执行计划包含信息 ? 不同版本Mysql和不同存储引擎执行计划不完全相同,但基本信息都差不多。mysql执行计划主要包含以下信息: ? id 由一组数字组成。...表示一个查询各个子查询执行顺序; id相同执行顺序由上至下。 ? id不同,id值越大优先级越高,越先被执行。 ?...或 where句中包含查询 4 DERIVED from字句中包含查询 5 UNION 出现在union后查询语句中 6 UNION RESULT 从UNION获取结果集,例如上文第三个例子

    1.3K30

    PostgreSQL查询当前执行SQL执行计划——pg_show_plans

    执行计划存储 如果同样SQL要执行很多遍,且每次都是同样执行计划、每次都发生硬解析,则会消耗大量时间。...对于无参预备语句,在第一次执行时候就会生成执行计划,之后会延用其来完成任务;对于有参预备语句,最优执行计划会因为变量实际值不同不同。...但是explain查询当前缓存执行计划,在实际估算成本可能是不准确,因为很可能估算成本和实际运行成本不一致。...pg_show_plans模块 接下来主题则是一个供PostgreSQL数据库查询正在进行SQL执行计划模块——pg_show_plans,它可以动态查找当前正在进行SQL执行计划。...一个session执行一条较慢SQL(便于获取到其执行计划) 一个session在SQL执行过程获取其执行计划 2.这里我举例SQL为对一张346MB全表扫描。

    2.8K40

    数据库查询优化技术(二):查询优化

    3.2多表连接每个表被连接顺序被用户语义决定 查询语句多表连接有着不同语义(如是笛卡尔集、内连接、还是外连接左外连接等),这决定着表之间前后连接次序是不能随意更换,否则,结果集中数据是不同...显示SQL语句带有分区表信息查询执行计划。 4 EXPLAIN命令输出格式有两种。  4.1 TRADITIONAL;传统类型;按行隔离,每个标识一个操作  4.2 JSOn;JSON格式。...,数据库可能返回类似“在FROM子句中查询无法参考相同查询级别关系”提示,所以相关子查询不能出现在FROM子句中; 非相关子查询出现在FROM子句中,可上拉查询到父层,在多表连接时统一考虑连接代价然后择优...示例: 3 WHERE子句位置 出现在WHERE句中查询,是一个条件表达式一部分,而表达式可以分解为操作符和操作数;根据参与运算不同数据类型,操作符也不尽相同,如INT类型有“、=...把一些查询置于外层父查询,作为连接关系外层父查询并列,其实质是把某些查询重写为等价多表连接操作(展开后,查询不存在了,外部查询变成了多表连接)。

    3.2K00

    MySQL(八)|MySQLInExists区别(2)

    IN 执行过程 sql示例:select * from tabA where tabA.x in (select x from tabB where y>0 ); 其执行计划: (1)执行tabB...Exists执行过程 sql示例:select *from tabA where exists (select *from tabB where y>0); 其执行计划: (1)先将tabA表所有记录取到...原因分析 两者索引使用情况跟第一次实验是一致,唯一区别是查询筛选结果集大小不同,但实验结果已经跟第一次不同了。...MySQL查询语句中IN 和Exists 对比分析 使用exists时,数据量变化没有带来执行计划改变,但由于查询结果集很大,5.5以后MySQL版本在exists匹配查询结果时使用是Block...Nested-Loop(Block嵌套循环,引入join buffer,类似于缓存功能)开始对查询效率产生显著影响,尤其针对查询结果集很大情况下能显著改善查询匹配效率

    3.7K40
    领券