PawSQL周更新 | 新增6个SQL审查重写规则
概述
本文介绍PawSQL上一周新增的四个SQL审查规则
避免使用STRAIGHT_JOIN
避免使用Natural Join
避免使用CROSS JOIN
避免COUNT DISTINCT多个可空列
以及两个重写优化规则,
NPE问题重写
显式禁止结果排序
这六个新的规则在PawSQL Cloud已可以正常使用。
1. 避免使用STRAIGHT_JOIN
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;