跳到主要内容

避免使用STRAIGHT_JOIN

Copyright © 2023 PawSQL

问题定义

Straight Join是MySQL中的一种表连接方式,它会强制以表的定义顺序来进行表连接,在结果上它等价与内连接。它给予了开发人员对数据库执行SQL的一定的控制能力。但它也失去了优化器带来的进行表连接顺序的优化,需要根据场景谨慎使用。PawSQL对使用STRAIGHT_JOIN的语句进行了风险提示,以避免其引起的性能问题。

tpch库中的lineitemorders两张表为例,下面的查询将直接以lineitem表在前,orders表在后进行连接,表示数据库将以表lineitem为驱动表,orders为被驱动表进行连接操作,不会对表的顺序进行优化。

SELECT * 
FROM lineitem
STRAIGHT_JOIN orders ON lineitem.l_orderkey = orders.o_orderkey;

审查预警

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

默认预警级别

  • 警告

从低到高三个预警级别,提示 < 警告 < 禁止

预警触发条件

  • SQL语句中出现STRAIGHT_JOIN语法

数据库类型及版本

  • MySQL 5.0.1

关于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镜像的方式提供部署安装。

联系我们