gpt4 book ai didi

mysql - 有什么方法可以使用 CASE 语句加快查询速度吗?

转载 作者:太空宇宙 更新时间:2023-11-03 12:18:36 26 4
gpt4 key购买 nike

我有这样的查询:

SELECT id
FROM table
GROUP BY columnName, CASE WHEN columnName IS NULL THEN id ELSE 0 END

GROUP 语句中的 CASE 语句的目的是防止 columnName 中有 null 的行(我正在使用的列值将行组合在一起)从被组合在一起。我只想将 columnName 中具有非空值的行组合在一起。

问题是 CASE 语句将查询的执行时间从 0.09s 增加到 0.854s,增加了大约 10 倍.

使用 EXPLAIN,我可以看到在没有 CASE 语句的情况下,使用了 columnName 的索引,但使用了 CASE 声明没有使用索引,我假设这就是查询变得如此慢的原因?

有什么方法可以防止 CASE 语句大大降低查询速度吗?例如,是否可以索引 CASE 语句?

我对 SQL 非常缺乏经验,所以我能想到的唯一解决方案是创建另一个列,命名为 columnName_or_id,并在我的软件中包含在插入后进行另一个查询的逻辑将 id 放入 columnName_or_id 的行,如果稍后将一个值插入到 columnName 中,也将该值插入到 columnName_or_id(因此是新列的名称,因为它包含行 idcolumnName 值)。这将消除查询中对 CASE 语句的需要。

有没有更好的办法?

最佳答案

尝试 COALESCE()

GROUP BY coalesce(columnName, id)

关于mysql - 有什么方法可以使用 CASE 语句加快查询速度吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21065462/

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