1

そのような現在の情報のビューを作成したい:

CREATE VIEW activeProducts AS SELECT * FROM products WHERE isActive = 1

上記のステートメントは、クエリのスナップショットを作成します。

SELECT * FROM products WHERE isActive = 1

したがって、このクエリの実行後に「products」テーブルのアイテムの状態を変更しても、ビューには反映されません。これが mysql の CREATE VIEW の機能であることは理解しています。現在の情報を表示またはフィルタリングするために使用するスイッチまたはコマンドはありますか?

4

2 に答える 2

2

あなたが探しているものは、具体化されたビューと呼ばれます。

MySQL は、マテリアライズド ビューをネイティブにサポートしていません。

いくつかの回避策がありますが、(パフォーマンスが悪い場合) 最もシンプルで簡単な方法はCREATE TABLE ... AS SELECT ...、ビューを作成する代わりに使用することです。これによりデータが複製され、データが多い場合は非常に遅くなる可能性があります。さらに、インデックスが作成されるとは思わないので、後で少しクリーンアップする必要があるかもしれません。

于 2011-03-31T20:47:43.347 に答える
0

必要なのは、スナップショットとも呼ばれる「マテリアライズド ビュー」です。

Charles は、スナップショットを作成する最も簡単な方法を提示しましたが、彼が提案したように、インデックスはありません。スナップショットに同じインデックスを含める場合は、次を使用できます。

create table if not exists snapshot_table like regular_table;
begin; 
  delete from snapshot_table; 
  insert into snapshot_table select * from regular_table where isActive = 1;
commit;

そうは言っても、テーブルが大きい場合、または結合または集計を使用する場合、ビューの更新は非常に高価になる可能性があります。

高速に更新できる「インクリメンタル リフレッシュ可能なマテリアライズド ビュー」を調査したい場合は、このブログ投稿を確認してください。

于 2011-04-06T17:02:02.760 に答える