1

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 もそうしていないに違いありません。

4

1 に答える 1

1

何年も前に、共用体ビューに関する同様の質問がMySQL フォーラムで行われました。MySQL 開発者は、MERGEを使用してビューにアルゴリズムを実装するのは簡単であることに同意しましUNIONたが、まだ実装されていません!

于 2013-12-03T11:07:13.587 に答える