跳到主要内容

避免使用Natural Join

Copyright © 2023 PawSQL

定义

natural join是一种特殊的等值连接,它可以和内连接、外连接及全连接配合使用,它会自动搜索两张表中所有相同列名和类型的列,并且以这些列为条件进行等值连接。natural join可以简化语句,但隐式连接条件降低代码的可读性,不利于理解表之间的关系,而且容易出现误连接。PawSQL对使用STRAIGHT_JOIN的语句进行了风险提示,以避免其引发的正确性问题。 以tpch库中的lineitem和orders表为例

SELECT *
FROM lineitem
NATURAL JOIN orders;

这会自动将lineitem表和orders表中名称和类型都相同的列(如orderkey)作为条件进行等值连接。

审查预警

PawSQL针对此情况提供相应的SQL审查预警。

默认预警级别

  • 警告

从低到高三个预警级别,提示 < 警告 < 错误

预警触发条件

  • SQL语句中出现CROSS JOIN语法

数据库类型及版本

  • MySQL
  • openGauss
  • Oracle
  • PostgreSQL
  • KingbaseES
  • MariaDB

关于PawSQL

PawSQL专注数据库性能优化的自动化和智能化,支持MySQL,PostgreSQL,openGauss,Oracle等,提供的SQL优化产品包括

  • PawSQL Cloud,在线自动化SQL优化工具,支持SQL审查,智能查询重写、基于代价的索引推荐,适用于数据库管理员及数据应用开发人员,
  • PawSQL Advisor,IntelliJ 插件, 适用于数据应用开发人员,可以IDEA/DataGrip应用市场通过名称搜索“PawSQL Advisor”安装。
  • PawSQL Engine, 是PawSQL系列产品的后端优化引擎,可以独立安装部署,并通过http/json的接口提供SQL优化服务。PawSQL Engine以docker镜像的方式提供部署安装。

联系我们