問題タブ [query-optimization]

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 に答える
8700 参照

sql - JOINedの同等のものよりも優れたパフォーマンスを発揮する派生テーブルクエリをさらに最適化するにはどうすればよいですか?

更新:私は解決策を見つけました。以下の私の答えを参照してください。

私の質問

このクエリを最適化してダウンタイムを最小限に抑えるにはどうすればよいですか?チケットの数が100,000から200万の範囲で、50を超えるスキーマを更新する必要があります。ticket_extraのすべてのフィールドを同時に設定することをお勧めしますか?私はここに私が見ていなかった解決策があると感じています。私はこの問題に1日以上頭をぶつけてきました。

また、最初はサブSELECTを使用せずに試しましたが、現在のパフォーマンスよりもはるかにパフォーマンスが低下しました。

バックグラウンド

実行する必要のあるレポート用にデータベースを最適化しようとしています。集計する必要のあるフィールドは計算に非常にコストがかかるため、このレポートに対応するために既存のスキーマを少し非正規化しています。数十の無関係な列を削除することで、チケットテーブルをかなり単純化したことに注意してください。

私のレポートは、作成時マネージャーと解決時のマネージャーごとにチケット数を集計します。この複雑な関係をここに示します。

EAV
(出典:mosso.com

このオンザフライで計算するために必要な半ダースの厄介な結合を回避するために、次のテーブルをスキーマに追加しました。

現在の問題は、このデータをどこにも保存していないことです。マネージャーは常に動的に計算されました。同じスキーマを持つ複数のデータベースに数百万のチケットがあり、このテーブルにデータを入力する必要があります。できるだけ効率的な方法でこれを実行したいのですが、使用しているクエリを最適化できませんでした。

このクエリは、170万を超えるチケットを持つスキーマで実行するのに1時間以上かかります。これは、私が持っているメンテナンスウィンドウには受け入れられません。また、manager_resolvedフィールドの計算も処理しません。これを同じクエリに結合しようとすると、クエリ時間が成層圏にプッシュされるためです。私の現在の傾向は、それらを分離し、UPDATEを使用してmanager_resolvedフィールドに入力することですが、よくわかりません。

最後に、そのクエリのSELECT部分​​のEXPLAIN出力を次に示します。

読んでくれてありがとう!

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

query-optimization - BOOLまたは算術演算で不要な余分な括弧に最適な方法/アルゴリズムはありますか

私はこれを持っています、私はそれをプログラムで構築しました:

デバッグのために、基本的に必要な括弧の量を最小限に抑える良い方法を探しています。

私はC#ですが、あなたが見た良いテクニックがあれば移植します。

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

sql - この SELECT CONCAT/GROUP BY クエリを高速化するにはどうすればよいですか?

データベースから場所 (都市、州) を選択する作業を行っています。問題は、クエリの実行が少し遅く、高速化する方法がわからないことです。例えば:

データベースがきれいな連結されたバージョンの場所を返すようにするため、場所に関係なく CONCAT が発生します (代わりにコードでこれを行う理由がない限り)。たとえば、「ニューヨーク、ニューヨーク」などです。実際には、3 番目の列が混在することがあります (郵便番号)。私はMySQLで実行しています。

このクエリを最適化する最善の方法は何ですか?

また、二次的な質問として、「DISTINCT」を追加すると、何らかの方法でクエリが遅くなりますか? 例えば:

(現在これをやっていますが、この質問をする過程で、GROUP BY句のためにDISTINCTは不要であることに気付きました;しかし、不要なので、それは何か違いがあるのだろうか、私はクエリを高速化するためにボートを揺さぶる必要があります。)

編集: 都市、州、および郵便番号に関するインデックスが既にあります。加えて、それらの組み合わせ (都市、郵便番号、および州/郵便番号のみ)。

0 投票する
6 に答える
5456 参照

sql - これにより SQL クエリが高速化されるのはなぜですか?

しばらく前に、DBA の友人から特定の SQL クエリを高速化する方法を学びました。SQL Server がクエリをコンパイルする方法に関係があり、クエリ パスはインデックス付きの値を使用する必要があると彼が言及したことを覚えています。

これが私の元のクエリです(20秒かかります):

「最適化された」クエリは次のとおりです (1 秒未満)。

これが非常に高速に実行される理由を詳しく説明できる人はいますか? 私はこれをよりよく理解しようとしています。

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

mysql - MySQL - 結合されたテーブルのすべての行と他のテーブルの文字列に一致する行を検索します

これは MySQL からのフォローアップです- 結合されたテーブルからすべての行に一致する行を検索します

このサイトのおかげで、クエリは完全に実行されます。

しかし、アーティストとトラックを検索するためにクエリを拡張する必要がありました。これにより、次のクエリが表示されました。

このクエリの Explain はかなり良さそうです。

最適化の余地はありましたか? クエリの実行時間は約 7 秒ですが、これは残念なことです。どんな提案でも大歓迎です。

ティア

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

sql-server - SQLServerインデックスの使用に関する質問

次のことを前提としています。

2番目のインデックスがインデックススキャンになり、最初のインデックスがインデックスシークになるのはなぜですか?キーの順序はどのように異なりますか?

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

mysql - MySQLJOINクエリの完了に時間がかかりすぎる

約250,000レコードのusersというテーブルがあります。ステージングと呼ばれる別のテーブルがあり、その中には約75,000レコードが含まれています。ステージングには、msisdnという1つの列しかありません。ステージングの行数がユーザーに存在しないことを確認したいと思います。

小さなデータサブセットでテストした次のクエリがありますが、正常に機能しているようです。

ただし、問題は、25万人のユーザーの完全なリストでこのクエリを実行しようとしたときです。私がそれを止める前にそれは1時間走った。このクエリを最適化する方法はありますか?

ステージングでデータのサブセットに対してクエリの実行を開始しましたが、これはひどく手動です。

msisdnはステージングテーブルの主キーですが、テーブルユーザーの主キーではありません。しかし、それが重要かどうかはわかりません。

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

php - クエリに OR 演算子が多すぎる場合、mysql クエリを最適化する方法は?

PHP と MySQL を使用する

Facebook から Facebook ユーザー ID の配列を取得しました。

ここで、この配列のアプリケーションで対応するユーザー名を見つけたいと思います。

明らかに、私のアプリケーションでは、ユーザー テーブルに一意のユーザー名と一意の fb_uid 値が含まれています。

私の初歩的なプログラミングの理解は、次の 2 つの方法につながりました。

1) ループを使用して fb_uid の配列を実行し、ユーザー名を 1 つずつ見つけます。

また

2) select distinct(username) from users where fb_uid = value1 OR fb_uid = value2 ... のようなモンスター クエリを作成します。

それで、より良い方法はありますか?

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

0 投票する
5 に答える
2838 参照

performance - どちらの側にもワイルドカードを使用できる Oracle 10g での文字列の一致

テスト ケースのスキーマとデータは次のとおりです。

今のところ mask 列を無視し、specialmatch 関数が存在すると仮定します。

生成する必要があります:

次、

生成する必要があります:

次、

生成する必要があります:

次、

生成する必要があります:

特別なマッチ機能を作成する方法についてのアイデアはありますか?

私の単純なアプローチは、特別な文字列比較 udf (疑似コード) を記述することです。

また、一致を行う前に、マスクを val にオーバーレイする必要があります。

例: val='1_345678', mask=' _ _' => 1_34567_ で、12345678 と 19345679 には一致しますが、92345678 には一致しません。

しかし、インデックスやオプティマイザーなどを活用するためにこれを行うにはどうすればよいでしょうか...

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

mysql - MYSQL クエリによって Web サイトが大幅に遅くなる可能性はありますか?

ねえ、各サイトで約 5 つの mysql "SELECT * FROM" クエリを使用する必要がある Web サイトを実行していますが、それによってダウンロード速度が遅くなる可能性があるかどうかを知りたいです。