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

mysql - 主キー+外部キーに複数のインデックスを作成することにはパフォーマンス上の利点がありますか?

主キーと外部キーを持つテーブルがあり、両方を含むクエリで検索が頻繁に行われる(...WHERE primary=n AND foreign=x)場合、2つのキーを使用してMySQLで複数のインデックスを作成することによるパフォーマンス上の利点はありますか?

どちらもすでにインデックスであることは理解していますが、外部キーが別のテーブルに含まれている場合でもインデックスとして表示されるかどうかはわかりません。たとえば、MySQLは主キーに移動し、正しいキーが見つかるまで外部キーのすべての値を比較しますか、それとも外部キーもインデックスであるため、外部キーがどこにあるかをすでに知っていますか?

更新:InnoDBテーブルを使用しています。

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

sql - MS SQL:巨大なテーブルから行を削除する最良の方法

1 億 7000 万行の非常に大きなテーブル [X] があり、使用済みレコードのみを [X] に保持するためにデータをアーカイブする必要があります。これは、速度が低下しているシステムを高速に保つために行っています。テーブル全体から少量の行しか使用していないため (10% 未満と言えば)、たとえば Archive.[X] に大量のデータをアーカイブする余裕があります。

問題は、レコードを削除しようとすると、時間がかかることです。ここで、トラブルシューティングに次のチェックを実行して、時間がかかる理由の可能性を確認しました。 1) テーブルにインデックスが作成されている 2) インデックスが作成されていない外部キーがない 3) 削除時にバックグラウンドで余分な作業を行うトリガーがない

同様のシナリオに遭遇した人はいますか?似たようなことをするときに従うべき最善の手順は何ですか? また、役立つツールはありますか?

私はあなたの助けに感謝します!

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

mysql - mysql 最適化スクリプト ファイル

誰かにデータベースの最適化をしてもらうことを考えています。異なるデータを持つ同様のバージョンのデータベースを提供した場合、実際のデータベースを見たり触ったりすることなく、データベースのすべての最適化 (インデックスの作成など) を実行するスクリプト ファイルを作成できますか? 私はMySQLを見ていますが、必要に応じて他のデータベースにも開放されます。提案をありがとう。

編集:

それが変換されたデータを含む同一のコピーである場合はどうなるでしょうか? データベースが何に使用されたか (つまり、OLAP と OLTP) を概算するいくつかのサンプル クエリと共に? スクリプトにすべてを含めることができるでしょうか、それとも実際のデータベースにアクセスする必要がありますか?

編集2:

データベースのコピーを作成し、認識できないようにデータを変換し、データベースのバックアップ ファイルを作成し、それをベンダーに渡すと、データベースで実行するスクリプト ファイルを提供してもらえますか?

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

django - django データベース クエリの最適化

django db クエリの最適化に関する初心者の質問:

Destination オブジェクトを編集するためのカスタム モデル フォームがあり、コンストラクターで、関連する Visitor モデルからクエリセットを取得します。このモデルには、Destination に ManyToMany フィールドがあります (カスタム モデル フォームを使用する理由については、EDIT を参照してください)。

アイデアは、関連する Visitor_set を変数にロードして、各訪問者が Visitor_set に存在するかどうかを確認するためのクエリの繰り返しを避けることでした。これは最善のアプローチですか?

また、データベース ロギングをオンにすると (この質問の 2 番目の回答で説明されているように)、目的地 ID 1 のすべての訪問者を選択するクエリ (3 番目の SELECT ステートメント) が繰り返されるのがわかりますが、これは私が書いたコードのどこにもありません。それはどこから来たのですか?

編集

Destination私が参照するオブジェクトは、オブジェクトのフィールドの関連する側ManyToManyですVisitor。私のフォームが Visitor オブジェクト自体を編集していた場合、Django はManyToManyフィールドを自動的に処理します。しかし、モデル フォームでこれを行うにはDestination、複数選択フィールドをVisitor追加し、メソッドをカスタマイズし__init__て選択肢と初期選択をロードする必要があります。

ただし、質問はクエリセットの処理方法と、シェルからも確認できる manytomany 値をロードするための不思議な 2 番目の SQL に関するものです。

ありがとう

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

php - php と mysql を使用して、この単純なデータベースとクエリを最適化するにはどうすればよいですか?

最も人気のあるゲームに応じて、データベースからゲームの範囲 (たとえば、制限 72、24) を引き出します。ゲーム データを追跡するための別のテーブルと、ゲームの個々の投票を追跡するためのテーブルがあります (1 から 5 までの評価、ゲームごとにユーザーごとに 1 票)。そのゲームのすべての評価投票の平均評価が最も高いゲームは、「最も人気がある」または「より人気がある」と見なされます。5 票未満のゲームは考慮されません。テーブルは次のようになります (「games」と「votes」の 2 つのテーブル)。

さて、「インデックス」と呼ばれるものがあることを理解しました。これは、基本的にテーブルを事前にクエリし、インデックスの別のテーブルを作成することでクエリを高速化できます(よくわかりません..それは私の印象です)。

また、複数のクエリを 1 つの長いクエリ (結合とネストされた select ステートメントを含むと思われます) に凝縮できる場合、mysql が最も高速に動作することも読みました。

ただし、現在インデックスを使用しておらず、最終結果を取得するために複数のクエリを作成しています。

データベースにどのような変更を加える必要がありますか (もしあれば -- インデックス テーブルの作成などを含む)? そして、私のクエリはどのように見えるべきですか?

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

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

database-design - ユーザー認証の詳細を別のテーブルに保存することの利点

mysqlにすべてのユーザーデータ(名、名前、住所など)を含むユーザーテーブルがあります

しかし、認証の詳細を別のテーブル(ユーザー名、パスワード)に保存し、ユーザーIDを介して2つのテーブルをリンクする必要がありますか?

これには多くのポイントがありますか?

より安全ですか?

それとも、コーディングを追加するだけですか?

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

django - Django QuerySetを使用してデータベースをチャンクで処理する最良の方法は?

データベース内のすべての行に対してバッチ操作を実行しています。これには、すべてのモデルを選択し、それに何かをすることが含まれます。これをチャンクに分割し、チャンクごとに実行するのは理にかなっています。

便利なので、現在Paginatorを使用しています。これは、値を順番にページングできるように、値を並べ替える必要があることを意味します。orderこれにより、 and句を持つSQLステートメントが生成さlimitれ、チャンクごとにPostgresがテーブル全体を並べ替えている可能性があると思います(ただし、内部に関する知識があるとは言えません)。私が知っているのは、データベースのCPUが約50%であり、それを実行するには高すぎると思いますselect

RDMBS / CPUに適した方法でテーブル全体を反復処理するための最良の方法は何ですか?

バッチ操作中にデータベースの内容が変更されないと仮定します。

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

sql - 質の高い Django アプリを作成するには、データベースについて何を知る必要がありますか?

私は自分のサイトを最適化しようとしていますが、この素敵な小さな Django doc: Database Access Optimizationを見つけました。これは、データベース最適化の開始点として、プロファイリングに続いてインデックス作成と適切なフィールドの選択を提案しています。

通常、django のドキュメントは、より経験豊富なプログラマーが「明白」と考えるかもしれないことでさえ、物事をかなりよく説明しています。この場合はそうではありません。インデックス作成についての説明がなかった後、ドキュメントは次のように続けています。

上記の明らかなことを行ったと仮定します。

うーん。待って!インデックス作成とは一体何ですか?

明らかに、私はGoogleを介してインデックス作成が何であるかを理解することができます.私の質問は、スケーラブルなWebサイトを作成するために、データベースに関する限り、何を知る必要がありますか? 特に Django フレームワークについて何を知っておく必要がありますか? 他に知っておくべき「明らかな」ことは何ですか?それらはどこで学べますか?

私はここで方向を指し示したいと思っています。SQL について何もすべてを学ぶ必要はありません。アプリを正しい方法で構築するのに十分な情報を得たいだけです。

前もって感謝します!

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

mysql - 最初にエントリが存在するかどうかを確認するよりも、新しいデータベース エントリを挿入する方が速いですか?

データベース エントリが存在するかどうかを確認し、存在しない場合は挿入するよりも、単に挿入を実行して挿入を失敗させる方が速いと言われたことがあります。

また、ほとんどのデータベースは、書き込みではなく読み取り用に大幅に最適化されているとも言われました。

これは予想される衝突数の問題ですか? (つまり、エントリが既に存在する可能性が低い場合にのみ挿入する方が高速です。) 実行しているデータベースの種類に依存しますか? さらに言えば、挿入エラーを常にエラー ログに追加するメソッドを使用するのは悪い習慣でしょうか?

ありがとう。

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

mysql - 「優先ユーザー」MySQL クエリで左結合を最適化できますか?

私は2つのテーブルを持っています:

poll_response (poll_id, option_id, user_id) (約 500,000 行、500 の一意のポーリング、1000 の一意のオプション、および 25000 の一意のユーザー)

preferred_users (user_id) (約800行)

各オプションを選択したユーザーの何パーセントが「優先ユーザー」(つまり、評判の高いユーザー) であるかを判断したいと思います。他のユーザーは投票に応答できます。応答が優先ユーザーからのものであることを識別するために、preferred_users テーブルへの結合が必要です。

これが私が持っているものです:

クエリは、次のようなテーブルを吐き出します。

次に、計算を行ってパーセンテージを決定します。

問題は、クエリが頻繁にタイムアウトになることです。つまり、完了するまでに 1 分以上かかるということです。

左結合を取り除くか、クエリを最適化する方法はありますか?