SQL实战经验 - 避免使用CROSS JOIN
· 阅读需 3 分钟
Copyright © 2023 PawSQL
问题定义
CROSS JOIN会将第一张表的每一行与第二张表的每一行进行笛卡尔乘积。它会生成表1行数x表2行数的记录。理论上它等价与条件为1=1
的内连接。CROSS JOIN可以快速将多表拼接,但是其会产生大量记录,造成效率低下;而且不指定连接条件,结果可能没有实际意义。
PawSQL对使用STRAIGHT_JOIN的语句进行了风险提示,以避免其引发的性能问题。
案例SQL如下
SELECT *
FROM lineitem
CROSS JOIN orders;
这会把lineitem
表的每条记录都与orders
表的所有记录进行组合。
审查预警
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镜像的方式提供部署安装。
联系我们
- 邮件:service@pawsql.com
- Twitter: https://twitter.com/pawsql
- 扫描关注PawSQL公众号