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

mysql - MySQL で巨大な操作を管理する方法

MySql データベースがあります。多くのレコード (約4,000,000,000行) があり、それらを削減するためにそれらを処理したい (約1,000,000,000行に削減)。

次のテーブルがあるとします。

  • table RawData : RawData に挿入したい 1 秒あたり 5000 行を超える行があります

  • table ProcessedData : このテーブルは、RawData で挿入された行の処理済み (集約) ストレージです。 最小行数 > 20,000,000

  • table ProcessedDataDetail : テーブル ProcessedData (集計されたデータ) の詳細を書き込みます

    ユーザーは、 8つ以上の他のテーブルに参加する必要があるProcessedDataテーブルを表示および検索したいと考えています。RawData への挿入と ProcessedData での検索 (ProcessedData INNER JOIN ProcessedDataDetail INNER JOIN ...) は非常に遅いです。多くのインデックスを使用しました。私のデータの長さは1Gですが、インデックスの長さは4Gです:)。(私はこれらのインデックスを乗り切りたいと思っています。それらは私のプロセスを遅くします)

このプロセスの速度を上げるにはどうすればよいですか?

ProcessedDataのシャドウ テーブルが必要だと思います。名前はProcessedDataShadowです。次に RawData を処理して ProcessedDataShadow で集計し、結果をProcessedDataShadowProcessedDataに挿入します。あなたの考えは??

(私はC++でプロジェクトを開発しています)

前もって感謝します。

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

query-optimization - 遅いクエリの最適化に関する質問 (SQL を含む)

上記のクエリは、200 万のユーザー/プロファイルで実行するのに約 100 秒かかります。私は DBA ではなく、私たちの DBA は何ができるかを確認するために状況を調べていますが、どのような変更が行われるかを確認することはおそらくないため (DB レベルで発生すると仮定して)、どのように最適化できるか興味があります。このクエリ。明らかに、5 秒以下のオーダーのように、実際よりもはるかに速く発生する必要があります。SQL を最適化する方法がない場合、クエリを高速化するために追加/変更できるインデックスはありますか、それとも他に見落としているものはありますか?

Postgres 9 が DB であり、Django の ORM がこのクエリの元です。

クエリ プラン

ありがとう

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

sql - Postgresで遅いSELECTDISTINCTクエリを高速化するためのソリューション

クエリは基本的に次のとおりです。

クエリの一部が低速で実行される理由であると100%確信しているふりをしてDISTINCT、混乱を避けるために残りのクエリを省略しました。これは、私が主に懸念しているのは個別の部分の低速であるためです(個別の常に速度低下の原因)。

問題のテーブルには、250万行のデータがあります。ここにリストされていない目的のためDISTINCT 必要です(変更されたクエリを元に戻したくないので、可能であれば、個別のクエリをDBMSレベルでより高速に実行するための一般的な情報です)。

DISTINCTSQLを変更せずに(具体的にはPostgres 9を使用して)実行を高速化するにはどうすればよいですか(つまり、このSQLを変更することはできませんが、DBレベルで何かを最適化するためのアクセス権があります)。

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

mysql - 乱雑なクエリを最適化する

したがって、この不浄なクエリがあり、実行に約 2 分かかるため、クリーンアップする必要があります。テーブル構造を変更することはできませんが、ループなどでサブクエリに分割することはできます。C++ と MySQL を使用しています。

基本的にタグが選択され、そのタグと結合しているユーザーをクエリで選択する必要があります。

これがクエリです。123 は長さ >= 1 の CSV タグ ID リストであり、josh@test.com は長さ >= 0 の無視する電子メールの CSV 電子メール リストです。アドバイスをいただければ幸いです。

大まかなテーブル構造:

編集: CSV としての EXPLAIN の結果は次のとおりです。

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

mysql - ORDER BY NULL は ORDER BY 列より遅い

MySQL のドキュメントによると、GROUP BY の後に ORDER BY NULL を追加すると、「結果のソートのオーバーヘッドを回避する」必要があります。もしそうなら、なぜクエリをたどるのが約5倍遅いのですか

ORDER BY advert_count?でクエリするよりも

phpMyAdmin プロファイリングから:最初の
クエリ:

2 番目のクエリ:

私はこれに混乱しています。そこで何が起こっているのか誰か説明してもらえますか?

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

mysql - mysql データベースから行を数える最良の方法

mysql クエリで読み込み時間が遅い問題に直面した後、行数を数える最良の方法を探しています。私はこれを行うために関数を愚かに使用mysql_num_rows()しましたが、これが最悪の方法であることに気付きました。私は実際にPHPでページを作るためにページネーションを作っていました。行数を数える方法がいくつか見つかりました。しかし、私はそれを数えるより速い方法を探しています。

テーブルの種類は MyISAM です

だから質問は今です

数えるのに最適で速いのはどれですか -

これを行うための他のより良い方法がある場合は、それらも教えてください。可能であれば、答えとともに説明してください-なぜそれが最適で高速なのか。そのため、要件に基づいてメソッドを理解し、使用することができました。

ありがとう。

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

mysql - MySQL の最適化: EXPLAIN "Extra" 列に "Using Where" が含まれる

だから、おまけの欄に「Using Where」があるのはいいことだなといつも思っていました。しかし、私は EXPLAIN を解釈する同僚のために茶色のバッグ ランチを計画していましたが、今はよくわかりません。MySQL のドキュメントでは、「Using Where」に関するメモに次のように記載されています。

WHERE 句を使用して、次のテーブルと照合するか、クライアントに送信する行を制限します。テーブルからすべての行をフェッチまたは検査する意図がない限り、Extra 値が Using where ではなく、テーブル結合タイプが ALL または index である場合、クエリに何か問題がある可能性があります。WHERE 句のすべての部分にインデックスを使用している場合でも、列が NULL になる可能性がある場合は where の使用が表示されることがあります。

これにより、WHERE 句にインデックスの一部しか含まれていない場合でも、列に NULL 値が含まれる可能性がある場合でも、MySQL は行を調べると考えるようになります。

本当?もしそうなら、必要がなければ NULL を含まないように列を変更する必要がありますか? スピードブーストは見られますか?

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

mysql - MySQL インデックスの作成

10 列のテーブルがあり、それらのほとんどに対して組み合わせ範囲フィルターをサポートする必要があります。

たとえば、次のように言いましょう。

しかし、それだけではありません。異なる列によるデータの並べ替えもサポートする必要があります。

私の質問は、検索を最適化するために作成する可能性のあるインデックスの組み合わせが膨大であることを考えると、どのオプションが考えられるでしょうか?

ありがとう!

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

mysql - 在庫データベースの設計

私は MySQL の使用にかなり慣れていないので、プレイヤーのインベントリ アイテムをデータベースに保存する最も効率的な方法を理解しようとしています。

セットアップは次のとおりです。

'player'というテーブルがあり、各プレイヤーには、テーブルのプライマリ インデックスとして設定される一意の 'playerid'が割り当てられます。

各プレーヤーはインベントリに最大 24 個のアイテムを持つことができ、それらのアイテムに関する情報は'player_inventory'というテーブルに保存されます。このテーブルには次のフィールドがあります。

playerid、slotid、uid、スタック、用途、耐久性

'uid'はアイテムの ID であり、'stack''uses'および'durability'は各アイテムに必要な値です (たとえば、別のスロットにある同じタイプのアイテムは'durability'が低くなる可能性があります)。

問題は、プレイヤーごとに最大 24 のスロット エントリがあり、他のフィールドが一意であることが保証されていないため、インベントリ テーブルの「playerid」にインデックスを設定できないことです。

したがって、このテーブルに 10000 人のプレイヤーのインベントリがある場合、このテーブルにクエリを実行すると、インデックスのない 240,000 エントリが潜在的に存在する可能性があるのではないかと心配しています。

データベースを最適化する方法についての知識はかなり限られていますが、アドバイスは大歓迎です。

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

php - PHP/MySQL挿入の問題

2つ以上のテーブルにデータを挿入するにはどうすればよいですか?

現在、私はこのトリックを使用しています。(構文が正しいと仮定しましょう)

だから私はこれを使っており、最適化する必要があります。

また、外部キーを使用する必要があると思いますか?しかし、phpmyadminでそれを行う方法がわかりません。

そして最後に:

これが私が欲しいすべてです。

「user」テーブルにデータを挿入し、自動的にテーブル「messages」と「files」にもユーザーと同じIDを設定するには、コードで3つのクエリを使用します。

私を助けてください。

前もって感謝します!

myb