問題タブ [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 に答える
715 参照

mysql - MySQLはテーブルにインデックスを付けており、EXPLAINは見栄えが良いですが、それでもインデックスを使用していません

クエリを最適化しようとしていますが、「EXPLAIN」に到達するとすべてうまく見えますが、それでも「log_queries_not_using_index」に表示されます。

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

したがって、「ウォールポスト」データのように取得し、USERSテーブルに参加して、ユーザーがまだアクティブユーザー(番号1)であり、他の2つの小さな「AND」であることを確認しました。

phpmyadminのEXPLAINでこれを実行すると、次のように表示されます

これは、t1クエリが「WHERE」を使用して35行を検出し、t2クエリが「WHERE」を使用して1行(ユーザー)を検出したことを示しています。

そのため、log_queries_not_using_indexレポートに表示される理由がわかりません。

任意のヒント?必要に応じて、さらに情報を投稿できます。

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

mysql - MySQLの説明実行プランの計算、2つのプランの違いを説明する

説明に関連する基本的なMySQLパフォーマンスの質問があります。EXPLAIN同じ結果を返す2つのクエリがあり、実行プランの意味を理解する方法を理解しようとしています。

テーブルには50000レコードがあり、レコード比較を実行しています。私の最初のクエリの実行には18.625秒かかります。説明プランは以下の通りです。

次のクエリの実行には0.106秒かかります...

ドキュメントではALL、全表スキャンが必要であり、これは非常に悪いと書かれています。またfilesort、レコードを並べ替えるには追加のパスが必要であると述べています。また、 MySQLが最適化Not existsを実行できたことを意味します。LEFT JOINまた、最初の方法ではインデックスを使用しているのに対し、2番目の方法では使用していないことも明らかです。

私はここで何が起こっているのか、そしてどのような数学が関係しているのかを解明しようとしています。私はRESET QUERY CACHEテストの合間に実行して、不当なアドバンテージが与えられていないことを確認しています。49520 x 413 x 4は、50000x49520よりもはるかに小さいです。

id説明計画のと関係がありますか?

これらのクエリや他のクエリをテストしているとき、同じIDのアイテムを乗算し、各IDの結果を合計することで、クエリの複雑さを概算できるようです...これは有効な仮定ですか?


追加

コメントで要求されたように、それが役立つ場合に備えてスキーマとクエリがありますが、私はより良いクエリを探していません...単なる説明ですEXPLAIN。問題のテーブル...

最初のクエリ...

2番目のクエリ...

また、インデックスを削除するeventScoreと、クエリが2.531秒に低下し、実行プランはそれほど変更されませんが、possible_keysの順序が変更されUsing index、テーブル用ではないことに気付きましたb(生成している行数のわずかな変更は無視してください)スキーマを変更するたびにデータ)...

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

ruby-on-rails-3 - Rails / PGの説明を理解する

EXPLAINちょっと厄介な質問だとは思いますが、何を説明しているのかわかりません..

私のクエリはUser.last、0.5 秒以上かかりました。これはおそらく最も単純なクエリですが、説明するのに問題があるようです..

QUERY PLAN Whats width の後に続くものがわかりません。コストとは何ですか?クエリに時間がかかった場所はどのように説明されますか?

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

mysql - MySQL クエリは where 句のインデックスを無視します

「日付」という列を持つテーブルがあります。

テーブルはこんな感じ

このテーブルに対して次のクエリを実行します。

次に、次のことを行いました。

この説明の結果は

ALL 型になるのはなぜですか? 私が知っていることから、基本的には、クエリがテーブル内のすべての行を検査し、日付のインデックスを無視することを意味します。私はmysqlがこれを使用することを期待していますが。

ここで何が起こり、日付インデックスが無視されるのはなぜですか?

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

mysql - MySQL で使用されているインデックスを知るには?

MYSQL データベースに多数のインデックスが作成されたテーブルがありますが、これらのインデックスのどれが役に立ち、どれが役に立たないかわかりません。本番環境で使用されているインデックスを知りたいです。

インデックスのログを使用する方法はありますか?

EXPLAIN コマンドは知っていますが、これは 1 つの特定のクエリに対するものです。複雑なシステムを使用しているため、使用されているクエリが何であるかを正確に知ることができません。一般的なログを回して、すべてのクエリを取得し、それらすべての EXPLAIN を作成してから、集計結果を取得することもできますが、これを行うにはもっと簡単な方法が必要です。

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

mysql - MySQL: ANALYZE TABLE に対するランダム効果

A、B、C という3innodbつのテーブルがあります。これら 3 つのテーブルを結合して結果を生成するクエリがあります。

最初に「EXPLAIN」コマンドを使用してクエリをテストしていたとき、次の順序が得られました。

B -- C -- A

ただし、これは最適ではありません。したがって、すべてのテーブルに対して「ANALYZE TABLE」を実行すると、次のようになります。

A -- B -- C

、これは正しい順序だと思います。

次に、SQL を本番環境にデプロイしましたが、理由もなく、1 か月後、実行計画は B--C--A という不適切なオプションに戻りました。その後、何度かANALYZE TABLE実行を試みましたが、今回は結果がわかりにくいです。B--C--A が表示されることもあれば、A--B--C が表示されることもあれば、他の実行計画が表示されることもあります。

だから私の質問は:

  1. 展開後に実行計画が変更されるのはなぜですか?
  2. 実行計画を固定する以外に (データが更新されて急速に変化するため、最適な計画は将来変更される可能性があります)、最適な計画が常に保証されることを保証する方法はありますか?
0 投票する
1 に答える
1760 参照

mysql - MySQL Explain と Slow Log

MySQL (5.1.66) の説明を使用すると、72 行だけをスキャンすると言いますが、「スロー ログ」ではテーブル全体がスキャンされたと報告されます (Rows_examined: 5476845)。クエリの何が問題なのかわかりません

*name*文字列の一意のインデックスであり *date*、通常の int インデックスです

これが説明です EXPLAIN SELECT * FROM table WHERE name LIKE 'The%Query%' ORDER BY date DESC LIMIT 3;

スローログからの出力

# Query_time: 5.545731 Lock_time: 0.000083 Rows_sent: 1 Rows_examined: 5476845 SET timestamp=1360007079; SELECT * FROM table WHERE name LIKE 'The%Query%' ORDER BY date DESC LIMIT 3;

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

xml - XML説明プランをPostgreSQLデータベースに保存する

XML Explain Plan(またはその他の形式)をPostgreSQLデータベースに保存するにはどうすればよいですか?

テストデータ:explain (verbose, format xml) select 1

結果を保存するテーブル:create table tmp.explain_plan_data (expp xml);

私の素朴なテストは失敗しました:

Explainは他のステートメントでは使用できないようですselect。次のステートメントも機能しません。

PostreSQL9.1.6を使用しています

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

mysql - EXPLAIN ステートメントには、「where を使用する」と書かれています。クエリで USE INDEX() が設定されている場合は「インデックスを使用」、それ以外の場合は「場所を使用」と表示

次の構造のappsテーブルがあります

このテーブルには 2 つのインデックスがあります -:

このクエリを実行します

次の情報を出力します -:

しかし、このクエリを実行すると

次の情報を出力します -:

Using indexどちらの場合も同じインデックスを使用しているのに、なぜ 2 回目に言っているのでしょうか?

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

mysql - クエリを最適化してインデックスを作成し、クエリ プランから一時およびファイルソートを使用して削除する

最初の半分の時間で実行されるように最適化したこのクエリがあります。

今、いくつかのインデックスを作成して実行を改善したいのですが、それを行う方法が見つかりません。

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

実行計画は次のとおりです。

centros テーブル (centro_id、centro、segcupones) にカバリング インデックスを作成しましたが、パフォーマンスは改善されませんでした (またはほとんど改善されませんでした)。現在、実行計画はインデックスを使用していることを示していますが、一時およびファイルソートも使用しています。

テーブル usuariohist (DERIVED) のインデックスも作成しましたが、成功しませんでした。クエリ プランは同じままです。これらのインデックスを試しました: (fecha, id), (usuario_id, fecha, id) およびカバー インデックス (usuario_id, fecha, id, web, comentario)。

関連するテーブルからのインデックス:

インデックスを作成するこのクエリを最適化する方法を知っている人は誰でも、解決策を説明してください。

前もって感謝します!