MySQLは用途、使用シナリオ、パフォーマンスの問題と注意事項を表示します

オリジナルます。https://blog.csdn.net/chuangxin/article/details/84574557

著者の見解では、「SQLiteのDefinitive Guideのは、」そのように定義されています。その内容は、他のテーブルの結果から導かれているので、また、派生テーブルと呼ばれる仮想表、あるビューを。ビューが見え、基本的なフォームと同じ感じ、彼らはベーステーブルではありませんが。テーブルの基本的な内容は、永続的であり、コンテンツの表示を動的に使用中に生成されます。

1、ビュー、作成、変更するSQL構文
マニュアル5.7 14.1.21 MySQLのリファレンスはVIEW構文をCREATE

CREATE [OR REPLACE] 
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] [DEFINER = {ユーザ| CURRENT_USER}] 
[SQL SECURITY {DEFINER | INVOKER}] 
のVIEW view_nameは[(column_listを)] 
ASリストselect 
[WITH [CASCADED | LOCAL] CHECK OPTIONを]

 


SQLyogのは、Navicatは、他のクライアントの可視化ツールは、定義ビューを変更するため、省略することができます。

2、ビュー、使用と使用のシナリオの
目的:
私の意見では、すべてのビューの目的:開発効率の向上、SQLクエリを簡素化します。古いテーブル構造と互換性のある別の用途がある場合。

使用シナリオ:
なしおそらく、価格、数量、税率、税額ない:1)必要性計算列、データベース設計のパラダイムは、我々は、そのような発注ようになりましデータテーブルの多くは計算されない列フィールドを、冗長なフィールドを減らすことが必要です税額、税、およびこれらの分野で使用されますが、レポートのたくさんあるので、我々はこの問題を解決するための計算列フィールドを含むビューを作成することができます。

2)などの異なるテーブルのフィールドの集約、情報の再編、:ディーラーは通常、店員は、店員は通常、優れた-従属関係(など、アカウントマネージャー、地域マネージャー、地域マネージャーを)持っているので、私たちは、ディーラーのセールスマンを見て確認する必要があります誰セールスマン直管の?地域マネージャー(おそらくNULL)である対応する店員のリージョナルマネージャー、?我々は、テーブル、テーブルの販売情報、テーブルビューディーラーで定義された関係を報告し、販売ディーラーの共同できるようにします。

3)セキュリティニーズなど、主に初期のレガシーシステムの統合ニーズ、:必要xxのシステムデータではなく、任意のインタフェース、どのようにしますか?データベースの直接操作、データセキュリティ、ビューの使用の合理化を伴うこの時、それは認可作品の数を削減し、データのセキュリティを確保することができます。現在のシステムは、ほとんどすべて新しく構築された公開APIインタフェースなので、認証やデータの粒度インターフェースの面でデータのセキュリティにもっと注意を払います。

4)古いデータテーブルとの互換性が、このような問題が発生しました。
私はサース技術に予定して最も大きな変更点のひとつになっていた会社が、独立して、パートナー企業との後にも、最初は個人的な使用のため、在庫管理システムを開発し、そのほぼすべてのユニット(co_id)フィールドの追加を使用してテーブル。調達システムをアウトソーシングすると、単一のテーブルを使用していることをもう一つの悲しいリマインダーは、システムメンテナンスを停止し、使用中に続けています。新しいテーブル名にオリジナルの購入注文テーブルの名前が付けられco_id =ビューを、所有する会社、およびオリジナルの購入注文テーブルを作成し、彼はそう。引き続き使用することができるシステムをアウトソーシングし、データの結果も問題ありません。

3、表示性能や注意事項は
、SQL簡素化するために持っているし、開発効率を向上するだけでなく、パフォーマンスを向上させる、魚のビットであると行う方法を、少し弱いのMySQLクエリ鶏肉はもちろんのこと、両方を持つことができませんか?私の提案は良い眺めの悪いパフォーマンスの低下が予想されるデータを用いて得ることができるということではありません。どのようにではない、それより悪いパフォーマンスを作るには?
MySQLのビューを処理する際の2つのアルゴリズムは、MERGEとTEMPTABLEをいいます。
あなたは、「CREATE VIEWを」文を実行するときに使用するアルゴリズムを指定することができます。MySQLのマージアルゴリズムがデフォルトで使用され、特定の単語を表示しません。

MERGEは、SQLクエリのSQL、新しいSQLクエリを再構成し、メインビューにマージします。オンライン非常に良いヒーロー「は、C言語のマクロ展開に多少似」と言っている
TempTableのは、テキストが知っていることを意図し見、それは単一のプロセスを表示するために一時テーブルを作成することです。
いわゆるMERGE動作の観点からは、C言語のマクロ展開に幾分類似する図の定義に応じて拡張され、ビューに関連する処理動作を指します。
あなたは、インデックスを使用することができますので、何も、MERGEアルゴリズム処理ビューのMySQLのパフォーマンスの問題を使用することはできませんする場合、一般的には、mysqlのクエリの最適化アルゴリズムではなく、MERGEアルゴリズムは、いつでも使用することができます。実際には、限り少し複雑なビューの定義として、MySQLはMERGEアルゴリズムを使用する方法はありません。限り、ビューの定義は、以下のビルディングブロックを使用してSQL MERGEアルゴリズムを使用することはできません、と言うの精度:

集約関数
DISTINCT 
BY GROUP 
HAVING 
集合演算(UNION、UNION ALL)
サブクエリ

 

複合ビュー定義のために、MySQLは、結果を使用して一時テーブル操作のビューのその後の操作は、一時テーブルに変換するように、保存されたビュー定義を実行する、すなわち、現状を維持する方法で使用されます。単一のビューからのソフトウェアの設計の観点から、このような方法は非常にエレガントですが、パフォーマンスの観点から、このアプローチはまた、非常に貧弱であると言うことはできません。

注意:
1)関連する操作のAコレクションなど、GROUP BY、DISTINCTを避けるために、ビュー定義を表示し、マージアルゴリズムの使用をしようと、
ビューがTEMPTABLEを使用して複雑な場合)2、その後、レコードTEMPTABLEの数を削減する方法を考えます。

おすすめ

転載: www.cnblogs.com/lvchengda/p/12574882.html