Mysql:如何使用组创建高性能视图

问题描述

我有一个查询,想授予某人查看权限。该查询非常基本,但大致如下:

-- In actuality,this is a 60 line SQL query joining 5 tables
SELECT * FROM
<a bunch of joined tables>
GROUP by a.id

通常在一个 id(它在初始表上建立索引)上查询此视图,如下所示:

SELECT * FROM ...
WHERE id < 10 AND row_last_modified > '2021-05-14 04:42:47'

当运行普通查询(针对表,而不是视图)时,这通常会在大约 10 毫秒内执行。然而,一旦我创建了这个视图,它似乎在做任何其他事情之前先在 每一行上执行 GROUP BY 和聚合,所以即使我获取一个 ID,查询仍然需要运行大约 5 分钟,使视图完全无法使用。在 mysql 中有没有办法解决这个问题,还是我只需要让最终用户访问所有这些表来执行查询而不是查看?

(我想另一种选择是创建没有 GROUP BY 的视图,并告诉用户“您必须添加此 GROUP BY a.id 才能使查询工作,否则您将得到垃圾结果。 ")

我读过的唯一可以解决这个问题的是 mysql8 中提供的下推:https://dev.mysql.com/doc/refman/8.0/en/derived-condition-pushdown-optimization.html,但也许我在这里遗漏了一些东西(手指交叉),有一种简单的方法可以做到这一点!

>

这是解释计划:

explain SELECT * from global_view where info_id=1;

enter image description here

在派生表上扫描的 765375 行似乎是杀手。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...