1

MySql 中有一条奇怪的规则,它基本上说如果你想创建一个视图并且你想在你的视图中使用诸如GROUP BY, DISTINCT, UNION等结构,你不能用ALGORITHM = MERGE! 在这里阅读更多。

这基本上意味着如果您在 MySql 中创建一个视图并且您的视图中有类似 GROUP BY 的内容,如果您运行如下查询:

select * from MyView
where foo = 2

然后 MySql 将从 MyView 读取所有行并将其放入临时表中,然后它将 where 子句(foo = 2)应用于临时表并返回结果。

问题是,如果您的视图有 1000 万行,它将获取所有 10M 行,然后应用 where 子句,这是非常低效的。

那么,有谁知道这背后的基本原理是什么?我知道 MS Sql Server 没有这样做,我敢打赌 Oracle 也没有这样做。

4

1 回答 1

1

多年前,在 MySQL 论坛上就工会观点提出了类似的问题。MERGE一位 MySQL 开发人员同意在视图上使用实现该算法应该很容易UNION,但 AFAIK 仍然没有实现!

于 2013-12-03T11:07:13.587 回答