[解決済み] クエリの説明プランはどのように解釈するのですか?
質問
SQL文がどのように実行されているかを理解しようとするとき、説明計画を見ることが推奨されることがあります。説明計画を解釈する(意味を理解する)には、どのようなプロセスを経るべきでしょうか。何が、quot;ああ、これは見事に動作していますね、quot;ああ、いいえ、それは正しくありません、quot。
どのように解決するのか?
フルテーブルスキャンは悪く、インデックスアクセスは良いというコメントを見るたびに、私は身震いします。フル テーブル スキャン、インデックス範囲スキャン、高速フル インデックス スキャン、入れ子ループ、マージ結合、ハッシュ結合などは、意味のある結論に達するために、分析者が理解し、データベース構造の知識およびクエリの目的と組み合わせなければならないアクセス機構にすぎません。
フル スキャンは、データ セグメント (テーブルまたはテーブル (サブ) パーティション) のブロックの大部分を読み取る最も効率的な方法であり、しばしばパフォーマンスの問題を示すことがありますが、それは、それがクエリの目的を達成するための効率的なメカニズムであるかどうかというコンテキストにおいてのみです。データ ウェアハウスおよび BI の専門家として言えば、パフォーマンスに関する私の一番の警告は、インデックス ベースのアクセス方法とネストされたループです。
ですから、説明計画の読み方のメカニズムについては、Oracleのドキュメントが良いガイドとなります。 http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/ex_plan.htm#PFGRF009
パフォーマンスチューニングガイドも熟読してください。
これは、クエリのさまざまな段階におけるカーディナリティの推定値と実行中に経験した実際のカーディナリティを比較するために、説明計画を使用することができるテクニックです。Wolfgang Breitlingがこの手法の作者だと思います。
要するに、アクセス機構を理解しなさい。データベースを理解する。クエリの意図を理解する。経験則を避ける。
関連
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] PHPでSQLインジェクションを防ぐにはどうしたらいいですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] Pythonスクリプトのプロファイリングはどのように行うのですか?
-
[解決済み] Eclipseを高速化する方法とは?
-
[解決済み] Swift Betaのパフォーマンス:配列のソート
-
[解決済み] 各グループの上位1行を取得
-
[解決済み] SQL Serverで結果をページ分割する最も良い方法は何ですか?
-
[解決済み】Javaの「ダブルブレース初期化」の効率化?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ERROR 1136 (21S01) を解決してください。列の数が Mysql の行 1 の値の数と一致しません。
-
解決策:ユーザー root で localhost:3306 にある MySQL に接続できませんでした。
-
[解決済み] SQLのカラム名があいまいな場合のクエリエラー
-
[解決済み] SQLテーブルで重複する値を検索する
-
[解決済み] NOT IN vs NOT EXISTS
-
[解決済み] "ON UPDATE CASCADE "を使用する場合について
-
[解決済み] SQL ServerでGROUP BYを使って文字列を連結する方法とは?
-
[解決済み] Entity Framework VS LINQ to SQL VS ADO.NETでストアドプロシージャを使う?[クローズド]
-
[解決済み] SQL/mysql - Select distinct/UNIQUE but return all column?
-
[解決済み] SQL Serverで、ある日付より大きいすべての日付を照会するにはどうすればよいですか?