mysql - CASE..ELSE 将为未使用的表达式占用额外的内存
问题描述
我正在使用MySQL 5.7
,现在我正在运行 SQL:
SELECT COUNT(1) AS `m0`
FROM (
SELECT (CASE WHEN ...
ELSE CAST(app_name AS CHAR(255)) END) AS d0,
...
FROM tableA
GROUP BY (CASE WHEN ... ELSE CAST(app_name AS CHAR(255)) END),
BINARY (CASE WHEN ... ELSE CAST(app_name AS CHAR(255)) END),
...
) AS `T_COUNT_`
现在结果说
Error Code: 1038, Out of sort memory, consider increasing server sort buffer size
但是,当我将 3 个CAST(app_name AS CHAR(255))
语句更改为时CAST(app_name AS CHAR(25))
,它按预期工作!
我知道该类型CHAR(255)
将安排 255 字节的内存,这将花费很大,但ALL
可能的值已在CASE WHEN
语句中列出(已多次检查和确认)。这意味着根本不应该使用ELSE
in ,那么为什么我减少there可以使SQL正常运行呢?CASE WHEN
CHAR()
任何帮助表示赞赏。
解决方案
推荐阅读
- uitableview - 内容更改时调整 UITableviewCell 的大小
- c# - 在 windows server 2016 下调用“dotnet exec”时出现 TypeLoadError
- c# - 在 Simple 注入器中注册装饰器,通用接口
- variables - 我想在打字稿选择查询中获取一个变量
- node.js - 父节点杀死testcafe进程
- python-3.x - 根据频率降序对列表进行排序
- openseadragon - 如何按照 loris 标准构建 tile url?
- c# - DataGrid 中的选定行已丢失
- mysql - Mysql:如何找到所有具有 ALTER 权限或任何权限的用户?
- javascript - 如何设置默认日期