MySql には奇妙なルールがあり、基本的に、ビューを作成したい場合や、ビューで などの構成を使用したい場合、 !GROUP BY, DISTINCT, UNION
を使用してビューを作成することはできません。ALGORITHM = MERGE
詳細はこちらをご覧ください。
これは基本的に、MySql でビューを作成し、ビューに GROUP BY のようなものがある場合、次のようなクエリを実行すると意味します。
select * from MyView
where foo = 2
次に、MySql は MyView からすべての行を読み取り、それを一時テーブルに配置します。その後、where 句 (foo = 2) を一時テーブルに適用し、結果を返します。
問題は、ビューに 1,000 万行ある場合、1,000 万行すべてを取得してから where 句を適用することです。これは非常に非効率的です。
それで、誰かがこれの背後にある理論的根拠を知っていますか? MS Sql Server がこれを行っていないことはわかっていますし、Oracle もそうしていないに違いありません。