gpt4 book ai didi

mysql - HAVING 上的索引?

转载 作者:行者123 更新时间:2023-12-01 00:27:51 25 4
gpt4 key购买 nike

在我对索引的基本理解中,索引用于 WHERE 子句中的列。由于 HAVING 子句类似于在 GROUP BY 语句之后应用的 WHERE 子句,索引是否具有相同的效果?例如:

SELECT * FROM table WHERE full_name = 'Bob Jones'
--> index on full_name would be beneficial here

SELECT * FROM table WHERE first_name = 'Bob' 
GROUP BY
height HAVING height > 72

在第二个查询中,first_name 和 height 上的索引是否会提高性能?哪个指数更重要,或者它们大致相当?此外,索引是否也提高了 GROUP BY 性能(不管 HAVING)?

最佳答案

HAVING 子句本质上是在将查询结果发送给客户端之前对查询结果进行过滤的最后一件事。它仅在您需要过滤聚合函数的结果时才有用,在 WHERE 子句执行的行级过滤期间其值不可用。

本质上,HAVING 子句可以看作是应用另一个查询,将您的主查询转换为子查询。

例如

SELECT ...
FROM sometable
HAVING somefield = X

真的没有什么不同

SELECT *
FROM (
SELECT ...
FROM sometable
)
WHERE somefield = X

如果您使用 HAVING 过滤的字段不是派生字段(聚合值、计算字段等),那么您几乎可以肯定最好在WHERE 级别,它首先防止不必要的行从磁盘加载。

由于 having 是最后应用的,行将从磁盘加载,如果它们不符合 HAVING 条件,则可能会被丢弃。

关于mysql - HAVING 上的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10971037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com