在MySql中有一个奇怪的规则,基本上就是说,如果你想创建一个视图,并且你想在你的视图中使用GROUP BY, DISTINCT, UNION等结构,你就不能用ALGORITHM = MERGE来创建你的视图!阅读更多here。
这基本上意味着,如果您在MySql中创建了一个视图,并且在您的视图中有类似GROUP BY的内容,如果您运行如下查询:
select * from MyView
where foo = 2然后,MySql将读取MyView中的所有行并将其放入一个临时表中,然后它将对该临时表应用where子句(foo = 2)并返回结果。
问题是,如果您的视图有1000万行,它将获得所有10M行,然后应用where子句,这是非常低效的。
那么,有人知道这背后的理由是什么吗?我知道MS Sql Server不会这样做,我打赌Oracle也不会这样做。
发布于 2013-12-03 19:07:14
几年前,一个类似的问题被问到了on the MySQL forums关于工会的看法。一位MySQL开发人员同意使用UNION在视图上实现MERGE算法应该很容易,但是AFAIK它仍然没有实现!
https://stackoverflow.com/questions/14949038
复制相似问题