問題タブ [materialized-views]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mysql - JOIN、WHERE、およびORDERでインデックスを使用しないMySQL
次のような単純なタグレコード構造に似た 2 つのテーブルがあります (実際にはもっと複雑ですが、これが問題の本質です)。
と
問題は、特定のタグを持つ順序付けられたレコードをフェッチすることです。それを行う明白な方法は、単純な結合と (PK)(Aa, Ab), (Ab), (PK)(Bb), (Bb,Bc) のインデックスを使用することです。
ただし、これにより、ファイルソートの不快な結果が得られます。
巨大で非常に冗長な「具体化されたビュー」を使用すると、かなりまともなパフォーマンスを得ることができますが、これはビジネス ロジックを複雑にするという代償を伴います。特に、A テーブルと B テーブルが既に MV:s (および他のクエリに必要であり、実際には UNION を使用して同じクエリを実行します)。
状況をさらに複雑にしているのは、B テーブルに範囲フィルターなどの条件があるという事実です。
しかし、ファイルソートの問題が解消されれば、これを処理できると確信しています。
上記のコードブロック 3 の単純な結合が並べ替えにインデックスを使用しない理由と、新しい MV を作成せずに何らかの方法で問題を回避できるかどうかを知っている人はいますか?
以下は、テストに使用している完全な SQL リストです。
sql - sqliteでマテリアライズドビューを作成するにはどうすればよいですか?
マテリアライズド ビューと SQLite について数えきれないほどの検索を行ってきました。私が見つけたものの中で、2004年と2006年に、SQLiteにはマテリアライズドビューがないという言及があるようです。2008 年 3 月からの SQLite の変更ログがすぐに続き、マテリアライズド ビューの最適化について特に言及しています。
さて、私は論理的に、2004年と2006年が時代遅れであるか、2008年の変更ログが間違っていると考えています.
それがどれであるか考えはありますか?
マテリアライズド ビューが現在 SQLite にある場合、それらはどのように作成されますか?
sql - Oracle 10gのマテリアライズド・ビューが高速リフレッシュを停止する原因は何ですか?
REFRESH FAST ON COMMIT
15分ごととして定義されているOracleのマテリアライズドビューがある場合。最初に作成されたときに機能し、楽しく更新されます。何が原因で高速リフレッシュが停止しますか?
これに基づいて、更新が停止していることがわかります。
sql - CREATE TABLE AS SELECT が MySQL を殺す
非常に強力なハードウェア (8 Xeon コア、8Gb RAM、および RAID10 を備えた HP DL360) で中程度の負荷 (200-300 QPS) で MySQL サーバーを実行しています。すべてのテーブルは innodb であり、アクティブなデータセットは割り当てられた 内に収まりますinnodb_buffer_pool_size
。
データベースは正規化されており、結合の数を減らすためにマテリアライズド ビューを使用してデータセットをフラット化します。データは 1 日に数回バッチで追加されるため、CREATE TABLE AS SELECT
複雑なトリガーを使用して動的に更新する代わりに、MV: を使用して再生成されます。
問題は、これらのCREATE
クエリが実行されている間 (それぞれに 5 ~ 50 秒かかります)、サーバーに対する他の無関係なクエリがクエリの後ろにキューに入れられ、CREATE
データベースが応答しなくなることがあります。
MV:s を (再) 生成するには、次のようなものを使用します。
SELECT の EXPLAIN は、次のようなものを生成します。
CREATE TABLE AS
サーバーが完全に過負荷になる理由と、それを防ぐ方法はありますか?
よろしく、
sql-server - クエリ/データベースの最適化: これを最適化する方法は? (そして、マテリアライズドビューを使用する必要がありますか?)
クエリを最適化する方法について質問があります。実際、クエリを頻繁に実行する予定なので、具体化されたビューまたはインデックス付きビューを使用するか (これは良い考えですか?)、非正規化することを考えていました。
次の 4 つのテーブルを考えてみましょう (無関係なフィールドは省略されています)。
- ユーザー (int userId)
- グループ (int groupId)
- GroupMemberships (int userId、int groupId、bool isSharing)
- コンピュータ (int userId)
この関係は、ユーザーが 0..n 台のコンピューター (1 人のユーザーから多数のコンピューター) を持つことができ、0..n グループのメンバーになることができるということです。グループには 0..n 人のユーザー (多数のユーザーから多数のグループ) を含めることができます。「isSharing」は、ユーザーがそのグループと共有しているか、そのグループの「読み取り専用」メンバーであるかを示します (つまり、共有メンバーのコンピューターを表示できますが、自分のコンピューターは共有しません)。
クエリは、特定のユーザーについて、そのユーザーが表示できるコンピューターを見つけることです。ユーザーは、自分のすべてのコンピューターを表示できます。彼女はまた、彼女がメンバーであり、そのグループと共有しているグループに属している他のユーザーのコンピューターも見ることができます。さて、それはあまり意味がないので、O(n^3) 疑似コードの目標は次のとおりです。
現在、私は ORM マッパーを使用しており、基本的に上記のことを行っています (SQL のことはあまり得意ではありません) が、それは明らかに理想的とは言えない解決策です。そこにリストしたすべてのフィールド (isShared を除く) にインデックスがあり、GroupMembership の (userId, groupId) タプルに追加のインデックスがあります。しかし、データベースの専門家がより良い解決策を思い付くことができるでしょうか?
プロジェクトはまだ稼働していませんが、ユーザーあたり平均 1.2 台のコンピューター (全員が 1 台、一部はそれ以上のコンピューターを所有する可能性があります) であり、ユーザーあたりのグループ メンバーシップはおそらく 0.75 になると思います (多くのユーザーはグループを使用しません)。機能ですが、そうする人は複数のグループのメンバーになる可能性があります)。また、これらの関連付けられたテーブルはすべて頻繁に追加されるため、マテリアライズド ビューの実用性が低下する可能性があります。SQL Server 2008 を使用しています。
ありがとう、万歳、ロバート
c# - linq データ抽出の最適化に必要なヘルプ
ネットワークの待ち時間を避けるために、3 つのテーブルすべてから一度にデータを取得しています。データのフェッチは非常に高速ですが、結果をループすると多くの時間がかかります
oracle - 列集計を使用したマテリアライズド ビュー
これは、私がここに投稿した問題への別の突き刺しです。別の方向に進むため、重複して閉じないでください。
データベースの列を別の列の集計で自動的に更新したいと考えています。関連する 3 つのテーブルがあります。
T_RIDER
を介しT_PONY
てn:m関係を持ちT_RIDER_PONY
ます。
T_RIDER
さらにT_PONY
いくつかの列がありますが、ここで関連するのはTMP_PONYLIST
andのみです。PONY_NAME
TMP_PONYLIST
のセミコロンで区切られたリストです。PONY_NAMES
次のようなものを想像してください"Twisty Tail;Candy Cane;Lucky Leaf"
。T_RIDER_PONY
またはに何が起こっても、このフィールドを最新の状態に保ちたいと思いT_PONY
ます。
すべてのアプリケーションはビューでのみ動作し、テーブルに直接アクセスすることはありません。マテリアライズド ビューでこの問題を解決する必要があります。マテリアライズドは、パフォーマンス上の理由から絶対的な要件であり、ビューがコミット時にそれ自体を更新する必要があります。
ビューは次のように作成する必要があります
For ...この記事の次の集計手法を試しました。
- WM_CONCAT -> 私の Oracle では利用できません
- ユーザー定義集計 ->
ORA-12054
- ROW_NUMBER および SYS_CONNECT_BY_PATH ->
ORA-12054
私はまだ試していません:
- 特定の機能
- 関数 Ref Cursor を使用したジェネリック関数
- 収集機能
これらのいずれかを具体化されたビューで機能させる機会はありますか、それとも無意味ですか。具体化されたビューで機能する可能性のある他の手法を知っていますか?
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi を使用しています。
oracle - Oracle でマテリアライズド ビューを部分的に更新することはできますか?
他の具体化されたビュー、通常のビュー、およびいくつかのテーブルに基づく非常に複雑な Oracle ビューがあります (「高速更新」できません)。ほとんどの場合、このビューの既存のレコードは日付に基づいており、「安定」しており、新しいレコード セットには新しい日付が含まれています。
時折、私はバックデートを受け取ります。それらが何であるか、およびテーブルを維持している場合の対処方法は知っていますが、これを「ビュー」に保ちたいと思います。完全な更新には約 30 分かかりますが、特定の日付では 25 秒しかかかりません。
マテリアライズド ビューの一部 (影響を受ける日付など) のみを更新するように指定できますか?
ビューを破棄し、テーブルとプロシージャを使用して、そのテーブルの特定の日付を入力または更新する必要がありますか?
oracle - Oracleのマテリアライズド・ビューが使用されているかどうかはどうすればわかりますか?
Oracle 9iデータベースには、もうここで働いていない人によってずっと前に作成されたマテリアライズドビューがいくつかあります。Oracleがクエリを提供するためにこれらのビューを使用しているかどうかを判断する簡単な(または任意の)方法はありますか?それらが使用されなくなった場合は、それらを削除したいと思います。しかし、これらのビューが、ランダムなレポートを数時間以内に実行できるようにするものであるという事実の後で発見したくありません。私が夢見ている答えは次のようなものです
さらに素晴らしいのは、マテリアライズドビューを使用している実際のSQLクエリを教えてくれるものです。私は私がより少なく解決しなければならないかもしれないことを理解します。
10gが必要な解決策があれば、すぐにアップグレードするので、それらの答えも役に立ちます。