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 也没有这样做。