問題タブ [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 投票する
4 に答える
11235 参照

mysql - 「explain」によって返される行がcount()と等しくないのはなぜですか?

「select * from table where relationship_title='xxxxxxxxx'; を説明してください」と思います。relationship_title='xxxxxxxxx' の行をインデックスで返します。しかし、それは本当の数よりも小さいです。

0 投票する
4 に答える
74869 参照

sql - DB2 Explainを使用するにはどうすればよいですか?

DB2のExplain関数を使用するにはどうすればよいですか?--実行するためと、クエリを最適化するために使用するための両方。DB2で利用できるより良いツールはありますか?

以前にクエリを作成したことがありますが、クエリの実行にかかる時間を知る必要がある唯一の方法は、クエリを実行して時間を計ることです。これはほとんど理想的ではありません。

編集:私にとっての答えは、「あなたはできません。あなたはアクセス権を持っておらず、アクセスすることもできません」であることが判明しました。あなたは官僚主義が好きではありませんか?

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

optimization - MySQLクエリの最適化:「ALL」を使用しないようにクエリを最適化することは常に可能ですか?

に関するMySQLのドキュメントによるとOptimizing Queries With Explain

* ALL: 前のテーブルの行の組み合わせごとに、フル テーブル スキャンが実行されます。テーブルが const とマークされていない最初のテーブルである場合、これは通常良くありません。通常、他のすべての場合は非常に悪いです。通常、定数値または以前のテーブルの列値に基づいてテーブルから行を取得できるインデックスを追加することで、ALL を回避できます。

これは、ALL を使用するクエリを最適化して、完全なテーブル スキャンを実行しないようにすることを意味しますか?

つまり、テーブルに正しいインデックスを追加することで、常に ALL の使用を避けることができるのでしょうか? または、追加するインデックスに関係なく、ALL が避けられない場合がありますか?

0 投票する
4 に答える
458 参照

mysql - 遅いMySQLクエリ

名前と別のフィールドで検索するMySQL(ストアドプロシージャで使用)のクエリがあります。これらの検索パラメーターのさまざまな組み合わせを使用すると、迅速な結果(1〜2秒)が得られますが、特定の値を使用すると、本番Webサイトで結果を返すのに9秒かかるクエリが得られます。以下は、EXPLAINステートメントから得たものです。

名前はvarchar(40)として宣言され、他のフィールドはUnsigned smallint(6)です。クエリで使用されている名前(IX_Name)の最初の15文字にインデックスを使用しています。遅いクエリでは、EXPLAIN出力の「rows」列でチェックするために非常に多くの行が取得されることがわかります。

パフォーマンスを向上させるために何ができるかわかりません。上記のEXPLAIN出力に目立った問題はありますか?

ありがとう、ティム

0 投票する
3 に答える
202 参照

mysql - サーバーで SQL を最適化する方法は?

次の SQL を最適化して、サーバーの読み込みを高速化し、使用率を下げる方法を知りたいですか?

米国の郵便番号の半径距離を計算して、特定の郵便番号から 50 マイル (緯度と経度を使用して計算) などの結果を取得し、データベースから他のデータ (他の郵便番号など) を取得する必要があります。 .

結果を取得したら (たとえば、特定の郵便番号から 50 マイル以内に異なる郵便番号の 350 行を取得した場合)、それらを別のクエリに渡して合計行をカウントし、それを単純な 1 つの結果で表示して読み取る必要があります。これが私のクエリの例です:

正しい結果 ( 350 行 ) が表示されますが、この SQL を実行すると CPU 使用率が高くなるため、最適化された方法で実行する必要があります。このクエリに対して EXPLAIN を実行すると、次のように表示されます。

さて、上記の説明から、EXTRAの「最適化されたテーブルを選択する」は良いことですか?このクエリを実行するための最も完璧な最適化 SQL を 1 つ教えてください。

0 投票する
3 に答える
2290 参照

sql - MySql とインライン SELECT

次のようなクエリがあります。

この選択では、正確に 1 行が返されます。インライン選択で使用される ID は、インデックス付きの列 (主キー) です。andをこの 1 つの行から返された int1/int2 の値に置き換えるt.int1と、クエリはミリ秒で完了します。t.int2上記のクエリを実行すると、つまり int1/int2 への参照を使用すると、約 10 分かかります。プロファイラーを実行して実際に何が起こっているかを確認すると、99% の時間、エンジンがインライン クエリからデータを返すためにビジーであることがわかります。MySql が実際に実行されているように見えます。

を適用する前に、インライン クエリのビットを 1 回

結果にビット。これは本当ですか?そうでない場合、何が起こっているのですか?SELECTinlineは、クエリの最後の要素として行ごとに実行されるため、潜在的に危険であると常に考えていましたが、このような状況では、イニシャルSELECTが非常に選択的であり、非常に効率的です。誰でもこれに光を当てることができますか?

編集:これまでのフィードバックに感謝します。私の懸念は、インラインクエリの行ごとの性質についてではなく、(同じ) ハードコーディングされた値ではなく、変数に直面したときに主キーインデックスを使用できないように見えるという事実です。私の推測では、ANALYZE が最近実行されていない場合、オプティマイザは、データ分散に関する知識がないため、テーブル スキャンを実行する必要があると想定します。しかし、範囲検索が主キーで行われるという事実は、それを補うものではないでしょうか?

0 投票する
4 に答える
199 参照

mysql - MySQLクエリの最適化

クエリ1:

クエリ2:

cidはchalcidの主キーであり、uidはc_usersでインデックス付けされます。cidは一意ではありません。

上記のクエリのどれが良いですか?

説明は次のように言います

  • クエリ1は、ALLとindex_subqueryの2種類のインデックスを使用します

  • 2つのユーザーに2種類のインデックス、つまりALLとrefをクエリします。

cidはテーブルchalの主キーですが、なぜ両方のクエリがインデックスのタイプとしてALLを言うのでしょうか。

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

sqlite - APIからのsqliteの説明

アプリケーションから複雑な SQL クエリを実行しています。クエリは、バージョン 3.6.11 (64ms) で正常に実行されます。3.6.22 で実行すると、終了までに 100 秒以上かかります。コマンド ライン クライアントから実行すると、11 と 22 の両方で実行が高速です。そのため、アプリケーション内から "EXPLAIN" を使用してクエリを実行したいと考えています。出来ますか?クエリを準備してステップ実行し、列をテキストとして読み取ろうとしましたが、結果は空です。

C++ API を使用してアプリケーションから「EXPLAIN」を実行できますか?

0 投票する
3 に答える
120 参照

mysql - 説明は、クエリがひどいことを示しています (単一のキーを使用していません) が、私は LIMIT 1 を使用しています。これは問題ですか?

クエリを含む Explain コマンド:

結果:

テーブルにいくつかのキーを追加しても違いはありますか? それでも、クエリは常に 1 行のみを返します。

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

mysql - この mysql クエリを最適化する方法 - 出力の説明が含まれています

これはクエリです(基本的にタグに基づく検索クエリ):-

以下は、このクエリを実行するために必要なデータベース ダンプです。

クエリは何をしますか? このクエリは、実際に "Brendan" を (名前や伝記などとして) 含むチューターを検索します。id_tags 2105,2120,2151,2026,2046 は、「%Brendan%」のようなタグに他なりません。

私の質問は:-

1.このクエリの説明では、参照列に ttagrels の NULL が示されていますが、可能なキー (Tutors_Tag_Relations、id_tutor、id_tag、id_tutor_2) があります。では、なぜキーが取得されていないのでしょうか。クエリが参照を取るようにする方法。それはまったく可能ですか?2. 他の 2 つのテーブル td と u は参照を使用しています。それらに必要な索引付けはありますか?ないと思います。

ここで Explain クエリの出力を確認して ください http://www.test.examvillage.com/explain.png