问题描述
我有一个查询,想授予某人查看权限。该查询非常基本,但大致如下:
-- 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;
在派生表上扫描的 765375
行似乎是杀手。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)