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;