SQL实战经验 - 避免使用STRAIGHT_JOIN
· 阅读需 3 分钟
Copyright © 2023 PawSQL
问题定义
Straight Join是MySQL中的一种表连接方式,它会强制以表的定义顺序来进行表连接,在结果上它等价与内连接。它给予了开发人员对数据库执行SQL的一定的控制能力。但它也失去了优化器带来的进行表连接顺序的优化,需要根据场景谨慎使用。PawSQL对使用STRAIGHT_JOIN的语句进行了风险提示,以避免其引起的性能问题。
以tpch
库中的lineitem
和orders
两张表为例,下面的查询将直接以lineitem
表在前,orders
表在后进行连接,表示数据库将以表lineitem
为驱动表,orders
为被驱动表进行连接操作,不会对表的顺序进行优化。
SELECT *
FROM lineitem
STRAIGHT_JOIN orders ON lineitem.l_orderkey = orders.o_orderkey;
审查预警
PawSQL针对此情况提供相应的SQL审查预警。
默认预警级别
- 警告
从低到高三个预警级别,提示 < 警告 < 禁止
预警触发条件
- SQL语句中出现STRAIGHT_JOIN语法