問題タブ [explain]
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 - EXPLAINステートメント(MySQL)の出力を理解する
以下の説明を返すクエリがあります:
これは、クエリがどこでもインデックスを使用していることを示していますか、それとも他のインデックスを追加することで改善できますか?これに基づいて:http ://dev.mysql.com/doc/refman/5.1/en/explain-output.html 、key
列には実際に使用されたインデックスが表示されていると記載されています。すべての列にインデックスがあります。
問題のクエリは次のとおりです。
テーブルには約140,000レコードがあります。このクエリの実行には3秒かかり、結果として135,725が返されます。
sql - Explain Analyze のネストされたアンチループのコスト
Explain Analyst を使用して次の出力を取得しています。
なぜループ アンチ ジョインのコストが 36.92 なのか理解できません。
他のサイトでは、ループの式を見てきました: 上部スキャンのコスト + 上部行 * 内部コスト。
しかし、私は 36.92 のコストを得ているので、仕方ありません。dbmanager はこのクエリをどのように解決していますか?
mysql - 'explain'コマンドが同じSQLステートメントで異なる結果を生成するのはなぜですか?
MySQLデータベースをある環境から別の環境に移行しましたが、移行後、特定のクエリの実行速度が以前よりも非常に遅いことがわかりました。
'explain'キーワード(下記)を使用してステートメントを調査したところ、'explain'コマンドが異なるサーバーで異なる出力を提供することがわかりました。
元の1つについては、次のようになります。
また、同じステートメントを使用すると、新しい環境で異なる出力が得られます。
mysql - MySQL EXPLAINステートメントは、タイプにALLを表示します
すばやく簡単な質問があります。
次のSQLを含むテーブルがあります。
EXPLAINステートメントを次のように実行しようとしたとき:
を持っていることを示す結果を受け取っていtype = ALL
ます。
ただし、EXPLAINステートメントを実行しようとすると、次のようになります。
を持っていることを示す結果を受け取っていtype = REF
ます。
私の質問は、最初のクエリがALLを表示し、2番目のクエリがREFを表示している理由だと思います。
誰かがこれに光を当てることができれば、それは大いにありがたいです!ありがとうございました!!
mysql - 可能なキーとして表示されていないインデックス
2つの個別のインデックスを作成したクエリがいくつかありますが、テーブルにはそれほど多くの行が含まれていないため、現時点では実際にそれらを使用する必要はないことを理解しています。ただし、possible key
を使用すると、として表示されませんEXPLAIN
。
クエリの例は次のとおりです。
代替クエリは、状態の前に別の句を追加するだけAND
です。例は次のとおりです。
ここで、次の2つのインデックスを追加しました。
ただし、MySQLは、可能なキーとして以下のインデックスのみを表示します。
私のインデックスは間違っていますか!?なぜこれを行うのですか?
mysql - mysql - インデックスを使用しない OR 演算子
私は単純な招待テーブルを持っています:
招待者 70 から招待者 62 への招待を選択したい、またはその逆を選択したい:
ただし、このクエリはタイプが ALL であり、invitee_inviter_idx を使用しません。ここで何が間違っているのか教えてください。
ありがとうございました!
==編集== 申し訳ありませんが、スキーマについて間違っていました。もう 1 つのフィールドがあります: request_ts。今回のクエリ プランは ALL です。
これが私のexlain結果です:
mysql - MySqlExplainは特定のクエリで一意のインデックスを無視します
私は初めてインデックスを詳細に調べ始め、初めてユーザーテーブルから始めてデータベースの分析を開始しました。私はSOを検索して同様の質問を見つけましたが、検索をうまく組み立てることができなかったと思います。
私は特定の概念を経験していましたが、この最初の観察で疑問に思いました-これらの説明の違い[違い:最初のクエリは使用'a%'
していますが、2番目のクエリは使用しています'ab%'
]
[テーブルの行の総数users
= 9193 ]:
(実際に一致する列= 1240)
(実際に一致する列= 109)
インデックスは次のようになります。
私の質問:
最初のクエリでインデックスが完全に無視されるのはなぜですか?mySqlは、インデックスを使用しない方がよいと考えていcase 1
ますか?はいの場合、なぜですか?
mysql - MySQL EXPLAINの出力を解釈する方法は?
text
から列の内容を選択したいentrytable
。
テーブルには3つのインデックスがあります。
- index_user(ユーザー)
- index_datum(データム)
- index_status_mit_spam(status、status_spam_user、status_spam_system)
EXPLAINの結果は次のとおりです。
possible_keys
MySQLが使用する可能性のあるインデックスとkeys
、MySQLが実際に使用するインデックスはありますか?- インデックス
index_status_mit_spam
が使用されないのはなぜですか?クエリでは、列の順序はインデックスと同じです... - インデックス
index_datum
が使用されないのはなぜORDER BY
ですか? - テーブルインデックスまたはクエリを最適化するにはどうすればよいですか?(上記のクエリには、テーブルに約100万のエントリがある場合、最大3秒かかります)
mysql - MySQL Optimize UNION クエリ
クエリを最適化しようとしています。
私の質問はMySQL、Union ALL、LIMITに似ているようで、答えは同じかもしれません(恐れています)。ただし、私の場合は、より厳しい制限 (1) と日時列のインデックスがあります。
だからここに行きます:
簡単にするために、3 つの列を持つ 1 つのテーブルだけにしましょう。
- md5 (varchar)
- 値 (varchar)。
- 最終更新日 (日時)
(md5, updated) にインデックスがあるため、md5 キーを選択し、更新された順序で並べ替え、1 に制限すると最適化されます。
検索では、10 個の md5 キーの 1 つに一致する最大 1 つのレコードが返されます。キーには優先順位があります。したがって、prio 1 のレコードがある場合、prio 2、3 などのレコードよりも優先されます。
現在、UNION ALL が使用されています。
それは機能しますが、10 個のキーが提供された場合、UNION は 10 個のクエリすべてを実行するようです。
ただし、ビジネスの観点からは、select を順番に実行し、最初の一致後に停止しても問題ありません。
それはプレーンSQLで可能ですか?
それとも、唯一のオプションはストアド プロシージャでしょうか。