問題タブ [sqlperformance]
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.
sql - SQL クエリには約 10 ~ 20 分かかります
私はから選択しています(複雑なものは何もありません)
このビューには、約 6000 のレコードと約 40 の列があります。これは、Lotus Notes SQL データベースから取得されます。つまり、私の ODBC ドライブは LotusNotesSQL ドライバーです。クエリの実行には約 30 秒かかります。私が働いていた会社では、EXCELを使用してクエリを実行し、すべてをワークシートに書き込んでいました。すべてをセルごとに書き込むと想定しているため、完了するまでに最大 30 ~ 40 分かかりました。
次に、MS アクセスを使用しました。データを格納するために、Access でレプリカ ローカル テーブルを作成しました。私の最初の試みは
これは疑似コードであることに注意してください。これは正常に実行されましたが、ここでも 20 ~ 30 分かかりました。次に、VBA を使用してデータをループし、個別のレコードごとに (INSERT ステートメントを使用して) 手動で挿入しました。これには約 10 ~ 15 分かかりました。これは私の最高のケースです。
後で行う必要があること: データを取得したら、部門別にフィルター処理する必要があります。問題は、SQLクエリにwhere句を入れた場合です(クエリの実行に30秒から約10分+ローカルテーブル/ Excelへの書き込み時間にジャンプします)。どうしてか分かりません。列がすべてテキスト列であるためでしょうか?
一部の列を整数に変更すると、where 句の点で高速になりますか?
これにアプローチする方法についての提案を探しています。私の上司は、Java ベースのソリューションを採用できると言っていました。これは役に立ちますか?私は Java の人ではなく ac# であり、おそらく c# を使用するように説得することもできますが、主に時間を短縮する方法についての提案を探しています。すでに 40 分から 10 分に短縮されていますが、2 分未満が必要です。
要約すると:
クエリの実行には約 30 秒かかります
Excel/Access でローカルにクエリを使用するには、約 15 ~ 40 分かかります
2分以内に必要
Javaベースのソリューションを使用できます
Java の代わりに他のソリューションを提案することもできます。
sql-server - LINQ-to-Entitiesはsp_executesqlを削除します
Database Engine Tuning Advisorを使用してデータベースを最適化しようとしていますが、直面している問題は、SQL Profilerトレースに、sp_executesql
-を使用して実行された大量のクエリが表示され、Advisorがそれらを処理できないことです。これらのクエリは、私が使用しているLINQ-to-Entitiesからのもののようです。したがって、LINQ-to-Entitiesにステートメントを直接呼び出させる方法があるかどうかを知りたいだけです。
sql-server - 後で使用できるようにクエリ実行プランを保存する方法
私のアプリケーションは、SQL Server データベースに対してクエリを実行します。
多くの場合、実行計画のメリットを実感できます。たとえば、ボタンを初めてクリックすると、
最初は 15 秒、次は 8 秒かかります。
編集: パラメータ化されたクエリを使用します。
したがって、2回目で7秒の改善があります。
ここで、アプリケーションを再度実行すると (新しいデータベース接続を行うため)、最初は 15 秒、2 回目は 7 秒かかります...
少なくとも同じ日の実行計画を記憶するために、SQL Server に実行計画を保存するように指示するにはどうすればよいでしょうか? または、すでに計算された実行計画の利点を得るにはどうすればよいですか? 異なるユーザーが同じクエリを実行する場合、おそらく IdUser が異なる場合でも、同じ実行プランを使用するのに十分なほどスマートであることを SQL Server に伝える方法です。
ソフトウェアにはいくつかのパラメーターがあるため、次のクエリの実行では MinDate と MaxDate が異なる可能性がありますが、これはクエリ プランに影響しますか?
mysql - MySQLのキー、プライマリキー、ユニークキー、インデックスの違い
KEY
、PRIMARY KEY
、UNIQUE KEY
およびはいつ使用する必要がありINDEX
ますか?
sql - 相互に比較的コストがかかる SQL クエリの側面は何ですか? 参加しますか?レコード数?列が選択されましたか?
SELECT One、Two、Three は、SELECT One、Two、Three、..... と比較してどのくらいコストがかかりますか?
2 つまたは 3 つのテーブルが結合され、100 行のデータを取得する SQL クエリがある場合、必要な数の列のみを選択する必要があるかどうかは、パフォーマンスに影響しますか? または、すべての列をヤンクするだけのクエリを作成する必要があります..
可能であれば、クエリのどの側面が互いに比較して比較的コストがかかるかを理解するのを手伝ってもらえますか? ジョインですか?プルされたレコードの数が多いのですか?selectステートメントの列数ですか?
1 レコード vs 10 レコード vs 100 レコードは重要ですか?
sql-server - EXCEPT を使用したデータセットの結合と LEFT JOIN での IS NULL のチェック
現在、Microsoft SQL Server 2008 - データベース開発 (MCTS 試験 70-433)認定に向けて取り組んでいます。Combining Datasetsに関する以前の章の 1 つで、 EXCEPT
(およびINTERSECT
) コマンドに出くわしました。1 つの例はEXCEPT
、次のように、2 番目のテーブルに関連する値を持たない 1 つのテーブルからすべての値を取得するために使用する方法を示しています。
このEXCEPT
コマンドは私にとって新しいものでしたが、今日までに知っていたことで、次の方法で結合制約LEFT JOIN
を使用して問題を簡単に解決できました。IS NULL
今、私はこれらのどれが最高のパフォーマンスを持っているのだろうかと考え始めました. クエリの実行計画を調べようとしましたが、それらを読むのがあまり得意ではないので、賢明にはなりませんでした。を使用したクエリの場合EXCEPT
、プランは次のようになります。
を使用するLEFT JOIN
場合は、次のようになります。
クエリで使用されるテーブルは、AdventureWorksDW2008サンプル データベースからのものです。そのため、質問に正しく答えるために必要な場合に備えて、2 つのテーブルの作成スクリプトも以下に含めます。
そして2番目のテーブル:
この質問は非常に具体的な例を使用していますが、 aと check onEXCEPT
の代わりに使用するのが適切な場合/場合についての一般的な情報にも興味があります。LEFT JOIN
IS NULL
INTERCEPT
また、1 番目のクエリをで実行しようとすると、2 番目のクエリと同等になるのは、標準のJOIN
and SELECT DISTINCT DimEmployee.EmployeeKey
(WHERE
句はまったくない)を使用することであることに気付きました。ただし、この場合、実行計画は 2 つのケースでまったく同じでした。
更新
2 番目のクエリのマイナー アップデート (改訂履歴を参照)。その結果、クエリ プランが少し複雑になりました。より大きなクエリ プランは最適でないクエリを示していると思いますが、それでもこの質問に答えていただきたいと思います。
sql - SQL Server 2000 のパフォーマンスに関する質問 - 大きなテーブル
1,100 万レコードに急速に近づいている大きなテーブルを用意します。(表の 20 列)。
私の質問は、テーブル内の行数に関して考慮すべきパフォーマンスの問題はありますか?
乾杯
postgresql - 複数の OR クエリを最適化する
ユーザーが同じ情報または部分的に同じ情報を入力したかどうかを検証する必要があるデータベース テーブルがあります。
これが私が考えていることです
データベースのレイアウト
クエリ
いずれかのデータが一致する場合 (そうです、誤検知になります)、古い rec_id が必要です。
これを行うためのより良い方法があるかどうか知りたいですか?
ありがとう
mysql - あるテーブルから別のテーブルに列を追加するための適切なMySQLの方法
他の小さなテーブルへのいくつかのキーを含む大きなテーブル(約1,000万レコード)があります。キーは小さいテーブルのそれぞれで一意ですが、大きいテーブルでは一意ではありません。一致するキーに基づいて、小さいテーブルの1つから大きいテーブルに列を追加したいのですが、それを行うための「正しい」方法がわかりません。私にはうまくいく解決策がありますが、それはかなりの時間がかかり(それは避けられないかもしれないと思います)、一般的にそれがそれを行うための最適な方法であるとは感じません。これが私が持っているものです:
これで仕事は終わりますが、私がすべて間違っているように感じます。少なくとも、これを行うためにテーブルの複製を作成する必要はないようです。これを行うためのより直接的な(そしてより効率的な)方法はありますか?
これは自宅での個人的な趣味のプロジェクトのためのものであることに言及する価値があるかもしれません。そのため、私はマシンのすべてのリソースを自由に占有できます(私だけがそれを使用しているため)。そのため、このようなことを行うための簡単なパフォーマンス調整のヒントがあれば、私はそれらに感謝します(Amazon EC2インスタンスでは、個人のデスクトップよりもはるかに高速でメモリが多いはずなので、これを実験しています) 。