7

私は 60 を超えるビューを持つ mysql データベースを持っており、補助ビューと最終ビューがあります。それらの間には依存関係があります。もちろん、これによりパフォーマンスの問題が発生しますが、このデータベースとシステムは私が設計したものではありません。

一部のレポートを高速化するために、最終的なビューをテーブルに具体化しています。補助ビューも具体化してから、それらを使用して他のビューを具体化し、補助ビューの再処理を節約することで、このプロセスを高速化できました。

これを行うには、ビュー間の依存関係を確認する方法が必要です。これにより、ビューを正しい順序で具体化できます。その情報をグラフに入力できれば素晴らしいと思います (たとえば、Graphviz や Tikz などのツールを使用して)。

各ビューを手動で分析する以外にこれを行う方法はありますか?

4

3 に答える 3

5

次のクエリを使用して、FROM 句から依存関係を取得しました。

SELECT  views.TABLE_NAME As `View`, tab.TABLE_NAME AS `Input`
FROM information_schema.`TABLES` AS tab 
INNER JOIN information_schema.VIEWS AS views 
ON views.VIEW_DEFINITION LIKE CONCAT('%',tab.TABLE_NAME,'%')

次に、ete2 モジュールを使用して依存関係をツリー構造として視覚化する Python スクリプトに出力をフィードします。誰かが興味を持っている場合は、スクリプトを共有できます。編集:注意、ビュー名が別のビュー名の部分文字列である場合、このクエリが問題を引き起こす可能性があることに気付きました。誰かが改善を提案できる場合は、してください。

于 2016-11-11T10:40:19.547 に答える
3

編集:注意、ビュー名が別のビュー名の部分文字列である場合、このクエリが問題を引き起こす可能性があることに気付きました。誰かが改善を提案できる場合は、してください。

SELECT  views.TABLE_NAME As `View`, tab.TABLE_NAME AS `Input`
FROM information_schema.`TABLES` AS tab 
INNER JOIN information_schema.VIEWS AS views 
ON views.VIEW_DEFINITION LIKE CONCAT('%`',tab.TABLE_NAME,'`%')

% の横の ` 記号は、部分文字列の問題やその他の問題を解消すると思います。実際には、これは機能します。私が目にする唯一の問題は、いくつかのテーブル名が列名と同じであるデータベースがある場合ですが、適切な DB 設計ではそうではありません。

于 2017-05-18T13:39:39.713 に答える
2

別のビューのクエリは多くのクエリ デザイナーで視覚化できますが、データベース内のビュー全体の構造は観察できません。

  • MySQL Workbenchと Oracle SQL Developer は、ビューを別々のオブジェクトとしてレンダリングしているようです。
  • SchemaSpyは、FROM 句ではなく、フィールド名に基づくビュー グラフをレンダリングします。

相互接続された 50 個までのビューを管理するのは困難です。そのタスクのための快適なツールはまだ見つかりません。

于 2013-03-16T18:52:22.597 に答える