PostgreSQL优化器的示例分析
在这个例子中,我们将分析一个简单的查询,该查询计算出每个人的平均薪资,并且只返回工资高于平均值的人员。
首先,让我们看一下查询的结构:
SELECT
name,
avg(salary)
FROM
employees
GROUP BY
name
HAVING
avg(salary) > (SELECT avg(salary) FROM employees)
首先,我们看到查询使用了GROUP BY子句来根据人员的姓名对工资进行分组。接下来,查询使用HAVING子句来筛选出平均工资高于总体平均工资的人员。
现在,让我们来看一下PostgreSQL优化器如何处理这个查询。首先,优化器会对查询进行语法检查,确保查询的语法是正确的。接下来,优化器会对查询进行语义检查,确保查询所引用的列和表是有效的。最后,优化器会生成一个执行计划,该计划指定了如何执行查询来获取最佳性能。
下面是PostgreSQL优化器生成的执行计划:
QUERY PLAN
--------------------------------------------------------------------------------------------------------------
GroupAggregate
(cost=32.75..33.25 rows=100 width=32)
-> Sort
(cost=32.75..32.80 rows=100 width=16)
Sort Key: e.name
-> Seq Scan on employees e
(cost=0.00..32.50 rows=100 width=16)
相关文章