問題タブ [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.
sql - SQLでのツリーの深さ
と呼ばれるテーブルtree_node
があり、主キーがと呼ばれid
、null許容列がと呼ばれparent_id
、テーブルにツリー構造(またはフォレスト)が埋め込まれているとすると、ツリー/フォレスト内のノードの深さを効率的に計算するにはどうすればよいですか? SQLで?
sql - このクエリを改善できますか?
以下のSQLコードを見てください。
関数FGETBIGINTLISTは、コンマ区切りの値をパラメーターとして受け入れ、その値を表形式で返します。
関数fresolve_11は、FGETBIGINTLIST によって返された bigint データを受け入れ、この形式で出力を返します。
私の要件は、FGETBIGINTLIST によって返された各データを関数 fresolve_11 に渡すことであり、このような結果セットを返す必要があります。
私のクエリは完全に機能し、期待される結果を返します。しかし、while ループと 2 つのテーブル変数を使用せずに、より良い代替手段を探しています。
前もって感謝します。
乾杯
ラメシュ・ベル
sql - 結合が変更されると、MySQL SELECT が永久に実行されます
次のSQLコードがあります。
これは、1 秒未満で行を実行して返します。ただし、ストレート結合を a に変更するとleft outer
:
クエリは永遠に実行され、サーバーの CPU の ~100% を使用します。
私は両方のクエリを実行しましたが、最初のクエリは のインデックスにexplain
ヒットし、2 番目のクエリはすべてのインデックスを無視しました。に索引があります。event_time
vicidial_agent_log
call_log.uniqueid
vicidial_agent_log
~41,000 行をcall_log
含み、 ~43,000 行を含みます。
だから私の質問は - MySQL が私が定義したインデックスにヒットしないのはなぜですか、強制的にそうさせる方法はありますか? そうでない場合、どうすればこのクエリを許容できる速度で実行できますか?
編集
完全なソリューション:
c# - 計算値(合計/合計)をデータベースにキャッシュする
次のオブジェクトモデルを検討してください(->>はコレクションを示します)。
顧客->注文
Orders->> OrderLineItems-> Product {Price}
アプリは注文の処理に重点を置いているため、特定の基準に一致するすべての注文を示すほとんどのタイムテーブルがUIで使用されます。99%の時間、私はLineTotalsの合計のみを表示することに関心があり、個々のLineTotalsは表示しません。
さらに考えてみると、各注文に複数の支払い(電信送金、小切手、クレジットカードなど)が関連付けられている可能性があります。これも、受け取った金額の合計にのみ関心があります。
データベースに注文を照会するとき、すべての注文を選択してから、注文ごとにその支払いとLineItemを選択したくありません。
私のアイデアは、各注文を「ステータス」オブジェクトに関連付けて保存し、注文のすべての合計とステータスをキャッシュし、桁違いにクエリのパフォーマンスを向上させ、未払いの注文、有料の注文、未払いの注文などのクエリシナリオをサポートすることでした。
これにより、ドメインロジック(注文が支払われたと見なされる場合など)がデータベースクエリにリークするのを防ぎます。ただし、合計を最新の状態に保つ責任があります。システムには通常、支払いの入力または統合、注文の作成/変更など、それが発生する必要がある明確に定義されたポイントがあります。
これまで、アイテムが追加または削除されたとき、またはアイテムの特定のプロパティが更新されたときにステータスの再計算をトリガーするObservableCollectionsを使用してきました。私は、dddの観点からすべての論理をどこに置くべきかを自問します。すべてのイベントワイヤリングと計算ロジックを集約ルートに強制するのは奇妙に思えます。
php - Php - 複数のカウンターインクリメントの最適化
非常にトラフィックの多い LAMP サーバーでは、メモリ テーブルを使用して、いくつかのデータ項目をカウンターとして追跡しています。次のように実装されます。
インデックスは一意の di_type と日付を設定するため、この日付のカウンターが存在する場合は di_type がインクリメントされ、この日付とデータ型の行がない場合は値 0 で作成されます。
ページビューごとに、このようなクエリがいくつかあります。これは、複数の mysql 呼び出しを意味します。
これを、いくつかの任意のカウンターを更新し、必要に応じて行を作成するか、存在する場合は値を増やすという考えを維持する 1 つの mysql 呼び出しにできる限り最適化することは可能ですか?
sql - Drupal でデータの整合性を維持する:
私はたまたま Drupal でモジュールを開発しましたが、ビューの制限がいくつかあるように見えるため、カスタム SQL を使用する必要がありました。これにより、ノードのリビジョンでいくつかの問題が発生し、Drupal ではネイティブ メソッドを使用してデータを操作するのが最善であるという結論に達しました。そうしないと、データの整合性の問題が発生する可能性があります。
また、Drupal で SQL クエリを最適化したい場合でも、実際のボトルネックに対してまれに実行する必要があるようです。
このジレンマに関連して、どのような経験がありますか? ダイレクト SQL クエリと Drupal モジュール/関数?
sql - AdventureWorks で低速なクエリが必要です (SQL 2005)
インデックスの最適化の演習 (読み: インタビューの質問) として、SQL2005 の標準の AdventureWorks データベースでは遅いクエリが必要です。私が試したすべてのクエリは約 1 秒かかります。効果的に最適化できるように、数秒かかるクエリを使用したいと思います。
ここで誰かがそのようなクエリを作成したり、遅いクエリを作成する方法を教えてくれたりできますか? クエリを非パフォーマンスにすることはできないようです:)
sql - WHERE 句の 100x 制約により、クエリが非常に遅くなります
私は Firebird を使用しており、EVENTS というテーブルを作成しました。列は次のとおりです。
ユーザーは、自分の周囲の特定の半径でイベントを検索したいと考えていますが、ホーム都市の 2、3 文字しか入力しませんでした。つまり、たとえば、緯度と経度を含む 200 の可能な都市があります。したがって、私の SQL クエリは次のようになります。
したがって、WHERE 句で 200 の制約を取得し、実際に結果を取得するのに数秒かかります。
クエリが恐ろしく見えるかもしれませんが、多くの制約が本当にボトルネックになっているのでしょうか? このクエリを最適化できますか?
php - 別のテーブルを使用してテーブルからレコードを削除しますか?
注: 編集者へ: より良いタイトルがあれば編集してください :)
私の質問は:
データベースに 2 つのテーブルがあります
table1 は 600,000 レコードです
table2 は 5,000,000 レコードです !!:)
table1 にない table2 のすべてのレコードを削除する最良の方法は何ですか?
ちなみに、私はプロセスを完了するために4時間待ちたくないので、最速の方法をメインにしています
次のコードよりも優れたものはありますか:
ありがとう