問題タブ [query-performance]
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.
database - ORACLEでクエリを最適化します。インデックスを試しました
このクエリがあり、適切なインデックスを追加してパフォーマンスを向上させたいと考えています。
インデックスの構文と、インデックスに必要な設定のタイプに精通していません。同じものを提供してください。ここでの主な問題は、MYTAB1には数百万のレコードがあるため、クエリに多くの時間がかかることです。ただし、MYTAB2には1000レコードしかありません。MYID1はMYTAB1の主キーです
インデックスを作成してみました:
クエリのパフォーマンスにはあまり影響しませんでした。
Explain Planを実行して、これを取得しました。
sql-server-2008-r2 - 子テーブルの適切な主キー?
従業員テーブルの主キーは何ですか?
[編集] 従業員は常に 1 つの店舗にのみ所属するように設定されています。すべての従業員は一意の ID を持つ必要があります (つまり、従業員が異なる店舗に所属していても、同じ ID を持つことはありません)。
PK は常に一意である必要があるため、EmployeeID のみにする必要があると思います。私の同僚は、PK は StoreID+EmployeeID と組み合わせるべきだと考えていますが、(理論的には) 従業員 ID が重複する可能性があります。私は彼の推論に完全に従うわけではありませんが、彼が引用したことの 1 つはパフォーマンスです。私たちのデータベースでは Employee テーブルが 5000 レコードを超えたことがないので、クエリのパフォーマンスについてはあまり心配していません。StoreID を参照する他の大きな子テーブルがありますが、これはそのようなキーを作成する正当な理由ですか?
[編集] EmployeeID のみに一意性を強制する内部キーも作成した場合、複合 PK は問題ありませんか? これを行うには複数の方法があるかもしれませんが、最も受け入れられている方法を選びたいと思います。
sparql - AllegroGraph クエリ プラン
AllegroGraph で SPARQL クエリを評価するためのクエリ実行プランを表示することは可能ですか (のようなものEXPLAIN
)。
postgresql - postgresql でのユーザー定義関数の事前計算
行ごとにユーザー定義関数を事前計算しようとしています。アイデアは、フィールドの1つにJSONオブジェクトをテキストオブジェクトとして持っていて、そこから他の「フィールド」を解析したいということです。これは、他の真のフィールドと同じようにクエリで返すことができます。ただし、JSON の解析のオーバーヘッドは重要です。クエリを高速化する方法でこの解析関数を事前計算する方法はありますか?
そもそもデータベースにテキストとして JSON があってはならないという主張は控えてください。私は長所と短所を知っています。
php - グループ連結の有無にかかわらず複数の行を取得するクエリ
次のテーブル構造があります。
したがって、これらのテーブルからデータを取得し、ユーザーの最後の 5 つの質問と、各質問の最初の 3 つの回答を表示するクエリが必要です。このようなもの:
これが私が目指しているディスプレイです。1つのクエリでこれを行うにはどうすればよいですか? グループ連結を使用して、1 つの質問に対する複数の回答をグループ化する必要がありますか? または、結果を取得し、PHP で配列を解析して、回答を question_id でグループ化する必要があります。また、このクエリを非常に高速にする必要があります。1 つのクエリを作成するか、ユーザーの質問を取得してから質問に回答する複数のクエリを作成する方が高速になるかどうかはわかりません。
sql - SQLでクエリのパフォーマンスを向上させる方法は?
2900000 レコードのテーブルがあります。現在、選択クエリを使用してデータを検索していますが、レコードを取得するのに 5 秒かかります。クエリを選択するだけで、実行に 4 ~ 5 秒かかります。
なぜそんなに時間がかかるのかわからない?
テーブルには、varchar(Max) である 4 つのフィールドがあります。何か問題の原因はありますか?
実行時間を短縮するために何をすべきかを誰かに提案できますか?
mysql - where句にインデックスを付けて、distinct(count(ColumnName))にインデックスが必要ですか?
このようなテーブルがあります
次のようにクエリすると:
列にインデックスがありOwnedBy
ます。テーブルが非常に大きいと仮定すると、インデックスも作成する必要がありますEmailAddress
か? 書き込み性能の低下は気になりません。
mysql - 副選択を使用したMySQLクエリのパフォーマンス-数百万行のテーブル
SQLクエリのパフォーマンスの向上について多くの質問があったことは知っていますが、それらの質問の回答を使用してクエリのパフォーマンスを向上させることはできませんでした(十分)。
rsyncやfslintよりも柔軟なものが欲しかったので、ファイルツリーをウォークし、パスとチェックサムをmysqlデータベースに格納する小さなjavaツールを作成しました。
私のテーブル構造はここにあります: http ://code.google.com/p/directory-scanner/source/browse/trunk/sql/create_table.sql-最初はテーブルが1つしかありませんでしたが、その後、ディレクトリパスの冗長な非常に長い文字列を別の場所に移動して1:nの関係にすると、多くのスペースを節約できます。
これらの2つのインデックスを定義しました。
今私を悩ませているクエリはそれらです: http ://code.google.com/p/directory-scanner/source/browse/trunk/sql/reporingQueries.sql
それらの最悪のものは最後のものであり、非常に高い確率で常に空のセットを返すはずです(sha1の衝突と誤って複数の挿入されたファイル):
(インデックスを作成した後)20k行しかない限り、1秒以内に十分に実行されましたが、75万行になったので、文字通り何時間も実行され、mysqlはCPUコアの1つを完全に使い果たします。その間ずっと。
このクエリのEXPLAINは、次の結果をもたらします。
私の他のクエリも75万行では迅速ではありませんが、少なくとも15分以内に終了します(ただし、数百万行でも機能するようにしたいと思います)。
更新:コメントをありがとうradashk、しかしあなたが提案したインデックスはmysqlによって自動的に作成されたようです->
UPDATE2:Eugen Rieckに感謝します!とにかく空のセットを返す可能性が最も高いので、あなたの答えはこのクエリの良い代替品だと思います。データを選択して、後で別のクエリで問題を説明するためにユーザーに表示します。私を本当に幸せにするために、誰かが私の他のクエリも見てくれるといいですね:D
UPDATE3:Justin Swanhartからの回答は、次の解決策に私を刺激しました。意図せずに複数回挿入されたディレクトリとファイルをチェックするクエリを実行する代わりに、次のような一意の制約を作成するだけです。
しかし、これが挿入ステートメントのパフォーマンスにどの程度悪影響を与えるのだろうか、誰かがこれについてコメントしてもらえますか?
UPDATE4:
長いので、動作しません。
UPDATE5:
さて、これは私が最初の質問で上で引用したクエリを置き換えるために使用するソリューションです:
最初の部分では、sha1の衝突を見つけて、これを使用します。
そして、それが何かを返す場合は、別のクエリで詳細を選択しますWHERE sha1 =?
このインデックスを定義すると、このクエリが最適に実行されると思います。
重複するディレクトリが存在しないことを確認するために、これを使用します。彼は制約を許可していないためです(上記のUPDATE4を参照)。
そして、複製されたファイルについては、この制約を作成しようとします。
これは非常に高速(15〜20秒)で実行され、高速化する前に他のインデックスを作成する必要はありません。また、エラーメッセージには、問題をユーザーに表示するために必要な詳細が含まれています(挿入する前にそれらをチェックするため、とにかくありそうにありません)
現在、より短い時間で実行できるクエリはあと5つだけです;)これまでのところEugenとJustinの多大な支援に感謝します!
UPDATE6:わかりました。最後の返信から数日が経ちましたので、ジャスティンの回答を受け入れるつもりです。それが私を最も助けてくれたからです。私はあなたの両方から学んだことを私のアプリに組み込み、バージョン0.0.4をここでリリースしました:http ://code.google.com/p/directory-scanner/downloads/detail?name = directory-scanner-0.0.4- jar-with-dependencies.jar
sql-server - RowNumber() および Partition By パフォーマンスのヘルプが必要
株式市場の移動平均値の表があり、1 日のうちに 2 つの値を比較し、その値を前日の同じ計算と比較しようとしています。私のSQLは以下のとおりです...結果セットを定義する最後のselectステートメントをコメントアウトし、結果セットとして表示された最後のcteを実行すると、約15分でデータが返されます。長いですが、一晩挿入 sproc として実行されるため扱いやすいです。示されているように実行すると、結果が表示されるまでに 40 分かかります。何かアイデアはありますか? おそらくBTWを追加すると、多少遅くなり、爆破するようになりROW_NUMBER() OVER (PARTITION BY)
ます.このパフォーマンスの問題では現在不可能なロジックをまだ処理しています. 前もって感謝します..
編集:以下に提案するようにパーティションを修正しました。
sql-server - 一時テーブルインデックス/パフォーマンスヘルプが要求されました
これは私の以前の投稿からの続きです:RowNumber()とPartitionByパフォーマンスヘルプが必要
パフォーマンスを大幅に改善する必要があるクエリがあります。以前の投稿での提案により、クエリで1つを除くすべてのcteを削除し、インデックスを含む一時テーブルを実装しました。それはまだ非常に遅いです...現在40分とカウントしていますが、まだデータは返されていません。いくつかの背景情報:すべてのデータが含まれる1つのテーブルには、約500万行が含まれています。その上には、Symbol、Period、およびTradeDateの列で構成され、Value列が含まれている、一意の非クラスター化を含む、いくつかのインデックスがあります。他にまったく同じものが2つありますが、最初に期間があり、次にTradeDateが最初です。テーブルにも一意のクラスター化されたインデックスがあります。何がこれをスピードアップできますか?一時テーブルの別のインデックス?半重複の投稿でごめんなさい..私はここで停止しています。どんな助けでも巨大になるでしょう。
要求に応じた実行計画: