跳到主要内容

27 篇博文 含有标签「optimize」

查看所有标签

SQL优化技巧 - 投影下推

· 阅读需 3 分钟
PawSQL Team
Optimize your SQL Queries by Clicks!

问题定义

投影下推(Projection Pushdown)指的通过删除DT子查询中无意义的列(在外查询中没有使用),来减少IO和网络的代价,同时提升优化器在进行表访问的规划时,采用无需回表的优化选项的几率。

考虑下面的例子,

SELECT count(1) FROM (SELECT c_custkey, avg(age) FROM customer group by c_custkey) AS derived_t1;

重写后的SQL为,

SELECT count(1) FROM (SELECT 1 FROM customer group by c_custkey) AS derived_t1;

SQL优化技巧 - 查询折叠

· 阅读需 6 分钟
PawSQL Team
Optimize your SQL Queries by Clicks!

问题定义

查询折叠(Query Folding)指的是把查询中的视图、CTE或是DT子查询展开,并与引用它的查询语句合并,从而减少查询语句的子查询数目,降低其复杂度的一种优化算法。其收益有以下三个方面:

  • 避免中间结果集的物化
  • 启用更多的连接顺序规划
  • 提供更多的索引建议机会(PawSQL索引推荐引擎)

SQL优化技巧 - 显式禁止结果字段排序

· 阅读需 3 分钟
PawSQL Team
Optimize your SQL Queries by Clicks!

问题定义

在MySQL的早期版本中,即使没有order by子句,group by默认也会按分组字段排序,这就可能导致不必要的文件排序,影响SQL的查询性能。可以通过添加order by null来强制取消排序,禁用查询结果集的排序;PawSQL识别并进行了重写。

譬如下面的例子中

SELECT l_orderkey, sum(l_quantity) 
FROM lineitem
GROUP BY l_orderkey;

在MySQL 5.x版本中,group by l_orderkey会引起默认排序, 可以通过添加order by null来避免该排序。

SQL实战经验 - NPE问题重写

· 阅读需 3 分钟
PawSQL Team
Optimize your SQL Queries by Clicks!

问题定义

SQL的NPE(Null Pointer Exception)问题是指在SQL查询中,当聚合列全为NULL时,SUM、AVG等聚合函数会返回NULL,这可能会导致后续的程序出现空指针异常。

select sum(t.b) from (values row(1,null)) as t(a,b);

可以使用如下方式避免NPE问题: