每个后端都应该知道的八个提升 SQL 性能的 Tips

作为一名后端程序员,可以说天天都要跟数据库打交道,不管使用的是 MySQL, Oracle 还是 SQL Server,毫无疑问都逃不开
SQL,所以日常工作中对于 SQL 的性能优化可谓说十分重要。今天阿粉就带大家看一下,每个后端程序员都应该知道的十个提升查询性能的技巧。

1.使用 Exists 代替子查询

子查询在日常的工作中不可避免一定会使用到,很多时候我们的用法都是这样的:

SELECT Id, Name

FROM Employee

WHERE DeptId In (SELECT Id

FROM Department

WHERE Name like %Management%);

相信大家平常肯定都是这样来使用的,其实还有一种更好的方法,如下所示:

SELECT Id, Name

FROM Employee

WHERE DeptId Exist (SELECT Id

FROM Department

WHERE Name like %Management%);

这里我们使用 exist 关键字而不是 In 关键字,当然如果在数据量不大的时候,两种方式都可以,但是当数据量很大的时候,exist 的方式会比 in
的方式效率高很多。因为 Exist 函数根据查询结果返回一个布尔值,速度会快很多。

2.适当的使用 JOIN 来代替子查询

除了上面的exist 之外在有些场景我们可以使用 JOIN
来替换子查询,毕竟子查询的效果是很差的,如下所示:

SELECT Id, Name

FROM Employee

WHERE DeptId in (SELECT Id

FROM Department

WHERE Name like %Management%);

使用 JOIN 的方式如下:

SELECT Emp.Id, Emp.Name,Dept.DeptName

FROM Employee Emp

RIGHT JOIN Department Dept on Emp.DeptId = Dept.Id WHERE Dept.DeptName like %Management%;3.使用 Where 替代不必要的Having

对于 where 的使用相信大家都很擅长,但是对于 Having
的使用可能平时用的不多,阿粉这里只能说:用得不多,挺好的!对于 Having 我们是能不用就不用不到万不得已的时候不要用,说真的阿粉工作这么多年,真没有使用
Having 的场景。我们先看下面的示例:

Having 的用法

SELECT Emp.Id, Emp.Name,Dept.DeptName,Emp.Salary

FROM Employee Emp

RIGHT JOIN Department Dept on Emp.DeptId = Dept.Id

GROUP BY dept.DeptName

HAVING Emp.Salary

THE END
Copyright © 2024 亿华云