跳到主要内容

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问题:

SQL优化技巧 - SAT-TC重写优化

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

定义

SAT-TC(Satisfiability-Transitive Closure) 重写优化会分析一组谓词,并试图判断:

  1. 谓词间是否存在矛盾(例如 c_custkey=1 AND c_custkey=0),或者

  2. 是否可以从谓词集中推断出新的谓词(例如 c_custkey=1 AND c_custkey=o_custkey 意味着 o_custkey=1)。

  3. 谓词是否可以简化(例如 c_custkey <> c_custkey or c_name = 'b' 可以简化为 c_name = 'b')

SAT优化与TC优化是两个联系紧密且相互作用的优化方法,他们常在一起被使用。

收益

SQL实战经验 - 避免使用SELECT *的9个理由及2个例外情况

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

Copyright © 2023 PawSQL

我们经常会看到一些文章警告使用SELECT * 是一种错误的习惯,应该明确地指定查询的列名,譬如在最新《阿里java开发手册(泰山版)》中对此是作为强制性的规则。不过,大家对其原因只是一知半解。本文将从两个角度解释避免使用SELECT *的9个理由,同时讨论两个合理使用SELECT *的例外场景。

性能问题

从性能的角度,在应用中使用SELECT *可能会引起查询的性能问题,主要表现在以下六个方面,

SQL优化技巧 - 如何创建高效的索引

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

Copyright © 2023 PawSQL

本文介绍索引创建时需遵循一些准则,以达到最佳的查询性能和数据维护效率。本文基于最常用的B+树索引来举例,其他索引的使用有一定的限制条件,具体请参考《数据库索引的类型》。

基于您的工作负载创建索引

创建高效的索引最重要的原则是,基于您的工作负载(workload)创建索引,而不是基于您的表结构。 索引的目的是为了提升数据库中操作的效率,因此任何其他不以工作负载出发的索引创建方法都是错误的。