問題タブ [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.

0 投票する
1 に答える
212 参照

mysql - EXPLAINステートメント(MySQL)の出力を理解する

以下の説明を返すクエリがあります:

これは、クエリがどこでもインデックスを使用していることを示していますか、それとも他のインデックスを追加することで改善できますか?これに基づいて:http ://dev.mysql.com/doc/refman/5.1/en/explain-output.html 、key列には実際に使用されたインデックスが表示されていると記載されています。すべての列にインデックスがあります。

問題のクエリは次のとおりです。

テーブルには約140,000レコードがあります。このクエリの実行には3秒かかり、結果として135,725が返されます。

0 投票する
1 に答える
761 参照

sql - Explain Analyze のネストされたアンチループのコスト

Explain Analyst を使用して次の出力を取得しています。

なぜループ アンチ ジョインのコストが 36.92 なのか理解できません。

他のサイトでは、ループの式を見てきました: 上部スキャンのコスト + 上部行 * 内部コスト。

しかし、私は 36.92 のコストを得ているので、仕方ありません。dbmanager はこのクエリをどのように解決していますか?

0 投票する
1 に答える
101 参照

mysql - MYSQL : LEFT JOIN の実行が遅い

私は2つのテーブルを持っています:

表1

表 2

次に、両方のテーブルに左結合します。

このクエリにより、データが表示されなくても Jquery DataTable プラグインの実行が非常に遅くなります。奇妙な点はこのフィールドB.nameにあります。クエリで言及するとデータは表示されませんが、削除するとデータが表示されます(つまり、実行しないことを意味しますLEFT JOIN)。

私のクエリが十分ではないかどうか? これは私のEXPLAIN

0 投票する
1 に答える
219 参照

mysql - 'explain'コマンドが同じSQLステートメントで異なる結果を生成するのはなぜですか?

MySQLデータベースをある環境から別の環境に移行しましたが、移行後、特定のクエリの実行速度が以前よりも非常に遅いことがわかりました。

'explain'キーワード(下記)を使用してステートメントを調査したところ、'explain'コマンドが異なるサーバーで異なる出力を提供することがわかりました。

元の1つについては、次のようになります。

また、同じステートメントを使用すると、新しい環境で異なる出力が得られます。

0 投票する
2 に答える
792 参照

mysql - MySQL EXPLAINステートメントは、タイプにALLを表示します

すばやく簡単な質問があります。

次のSQLを含むテーブルがあります。

EXPLAINステートメントを次のように実行しようとしたとき:

を持っていることを示す結果を受け取っていtype = ALLます。

ただし、EXPLAINステートメントを実行しようとすると、次のようになります。

を持っていることを示す結果を受け取っていtype = REFます。

私の質問は、最初のクエリがALLを表示し、2番目のクエリがREFを表示している理由だと思います。

誰かがこれに光を当てることができれば、それは大いにありがたいです!ありがとうございました!!

0 投票する
1 に答える
142 参照

mysql - 可能なキーとして表示されていないインデックス

2つの個別のインデックスを作成したクエリがいくつかありますが、テーブルにはそれほど多くの行が含まれていないため、現時点では実際にそれらを使用する必要はないことを理解しています。ただし、possible keyを使用すると、として表示されませんEXPLAIN

クエリの例は次のとおりです。

代替クエリは、状態の前に別の句を追加するだけANDです。例は次のとおりです。

ここで、次の2つのインデックスを追加しました。

ただし、MySQLは、可能なキーとして以下のインデックスのみを表示します。

私のインデックスは間違っていますか!?なぜこれを行うのですか?

0 投票する
2 に答える
2656 参照

mysql - mysql - インデックスを使用しない OR 演算子

私は単純な招待テーブルを持っています:

招待者 70 から招待者 62 への招待を選択したい、またはその逆を選択したい:

ただし、このクエリはタイプが ALL であり、invitee_inviter_idx を使用しません。ここで何が間違っているのか教えてください。

ありがとうございました!

==編集== 申し訳ありませんが、スキーマについて間違っていました。もう 1 つのフィールドがあります: request_ts。今回のクエリ プランは ALL です。

これが私のexlain結果です:

0 投票する
2 に答える
178 参照

mysql - MySqlExplainは特定のクエリで一意のインデックスを無視します

私は初めてインデックスを詳細に調べ始め、初めてユーザーテーブルから始めてデータベースの分析を開始しました。私はSOを検索して同様の質問を見つけましたが、検索をうまく組み立てることができなかったと思います。

私は特定の概念を経験していましたが、この最初の観察で疑問に思いました-これらの説明の違い[違い:最初のクエリは使用'a%'していますが、2番目のクエリは使用しています'ab%']

[テーブルの行の総数users= 9193 ]:

ここに画像の説明を入力してください

(実際に一致する列= 1240

ここに画像の説明を入力してください

(実際に一致する列= 109

インデックスは次のようになります。 ここに画像の説明を入力してください

私の質問: 最初のクエリでインデックスが完全に無視されるのはなぜですか?mySqlは、インデックスを使用しない方がよいと考えていcase 1ますか?はいの場合、なぜですか?

0 投票する
2 に答える
13236 参照

mysql - MySQL EXPLAINの出力を解釈する方法は?

textから列の内容を選択したいentrytable

テーブルには3つのインデックスがあります。

  • index_user(ユーザー)
  • index_datum(データム)
  • index_status_mit_spam(status、status_spam_user、status_spam_system)

EXPLAINの結果は次のとおりです。

  • possible_keysMySQLが使用する可能性のあるインデックスとkeys、MySQLが実際に使用するインデックスはありますか?
  • インデックスindex_status_mit_spamが使用されないのはなぜですか?クエリでは、列の順序はインデックスと同じです...
  • インデックスindex_datumが使用されないのはなぜORDER BYですか?
  • テーブルインデックスまたはクエリを最適化するにはどうすればよいですか?(上記のクエリには、テーブルに約100万のエントリがある場合、最大3秒かかります)
0 投票する
3 に答える
1093 参照

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で可能ですか?

それとも、唯一のオプションはストアド プロシージャでしょうか。