問題タブ [database-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.

0 投票する
6 に答える
7884 参照

tsql - sybase - 文字列がハードコーディングされていない限り、インデックスを使用できない

Sybase 12.5.3 (ASE)を使用しています。MSSQL をかなり広範囲に使用してきましたが、Sybase は初めてです。ストアド プロシージャが非常に遅いシナリオに直面しています。比較的大きなテーブルの単一の SELECT stmt に問題を追跡しました。そのステートメントを変更すると、プロシージャーのパフォーマンスが劇的に改善されます (元に戻すと、大幅に速度が低下します。つまり、SELECT ステートメントが間違いなく原因です)。

上記のコードは、実際のコードを改造/簡略化したものです。手順の再コンパイル、統計の更新などをすでに試みたことに注意してください。

文字列がハードコードされている場合にのみ Sybase ASE がインデックスを選択し、別のテーブルから選択するときにテーブル スキャンを選択する理由がわかりません。誰か手がかりを教えてください。よろしくお願いします。

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

mysql - mysql パーティショニング

データベース パーティションがデータベース レベルでのみ実装されていることを確認したいだけです。パーティション化されたテーブルをクエリするときは、通常のクエリを実行します。クエリに特別なことは何もありません。最適化はクエリの解析時に自動的に実行されます。それでよろしいですか?

たとえば、「country_code」と「city」という列を持つ「address」というテーブルがあります。したがって、米国ニューヨークのすべての住所を取得したい場合、通常は次のようにします。

テーブルが 'country_code' でパーティション分割されている場合、クエリは country_code = US を含むパーティションでのみ実行されることがわかっています。私の質問は、SQL ステートメントでクエリするパーティションを明示的に指定する必要がありますか? または、以前のステートメントをまだ使用していて、db サーバーが自動的に最適化しますか?

前もって感謝します!

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

hibernate - 大規模なデータセットの休止状態のクエリを高速化するデータベース設計

現在、Spring MVC ベースのバス ルート プランナーからアクセスされた、休止状態でマッピングされたバス ネットワークを表す以下のテーブルがあります。ルート プランナー アプリケーションの実行速度を上げようとしています。上記のすべてのテーブルをリストにロードして、ルート プランナー ロジックを実行します。 .

私のパフォーマンスを高速化する方法や、大量のデータを処理するというこの問題に対処するための別の方法の提案を誰かが持っていれば幸いです

これは、各テーブルからすべてのデータをロードするのにかかる時間です:

休止状態の注釈

HashMap -> CoodinateID から Coordinate コードへ

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

ruby-on-rails - Ruby on Railsの「has_many」配列は「知る必要がある」ベースでデータを提供しますか?

たとえば、Ruby onRailsでActorモデルオブジェクトがTomHanksであり、「has_many」ファンが20,000 Fanオブジェクトである場合、

20,000要素の配列を提供します。おそらく、要素には値が事前に入力されていませんか?そうしないと、DBから各Actorオブジェクトを取得するのに非常に時間がかかる可能性があります。

それで、それは「知る必要がある」ベースですか?

では、actor.fans [500]にアクセスするとデータがプルされ、actor.fans [0]にアクセスするとデータがプルされますか?各レコードからレコードにジャンプする場合、シーケンシャル読み取りを実行してパフォーマンスを最適化することはできません。たとえば、これらのレコードが近くのセクター/プラッターレイヤーにある可能性があるため、ハードディスク上でより高速になります。プログラムが2つのランダムな要素に触れると、それらの2つのレコードを読み取るだけの方が高速になりますが、すべての要素にランダムな順序で触れると、すべてのレコードを順番に読み取ってからランダムを処理する方が速くなる可能性があります。要素。しかし、RoRは、私がいくつかのランダムな要素だけを実行しているのか、すべての要素をランダムに実行しているのかをどのように知るのでしょうか?

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

rdbms - アーカイブに適したDBMSとは何ですか?

私はここ数年MsSql/MySqlの世界で立ち往生しており、もう少し翼を広げることにしました。現在、私はどのDBMSがデータをアーカイブするときに必要なものに優れているかを調査しています。例えば。たくさんの書き込みと低い読み取り。

私はNoSQLの十字軍を見てきましたが、RDBMSの考え方が非常に強いので、少し懐疑的です。

誰か提案がありますか?または、この種のもののベンチマークなどがある場所へのポインタですら。

ありがとう:)トーマス


編集

質問があったので、私が考えていることについてもう少し情報を提供しようと思います

複数のサーバーでサービスを実行します。これらのサーバーにはすべてローカルデータベースがあります。これらのデータベースは大量のヒット(1/1読み取り/書き込み)があるため、クエリ時間を短縮するために、可能な限り空のままにしておくようにしています。私の最初の見積もりでは、30分を超えてそのデータベースに行が存在することはありません。これらの各サービスでアーカイブデータベースを実行することは、リソースの浪費のように思われるため、中央のアーカイブアーキテクチャの方が見栄えがします。

簡単なネットワークアーキテクチャをアスキーアップしてみます

ご存知かもしれませんが、MsSQLとMySQLは、書き込みを処理する場合にのみ垂直方向にスケーリングします(rdbmsのものかどうかはわかりません)。そのため、私はそのアーカイブDBMSから可能な限り最高のパフォーマンスを引き出すことを検討しています。

0 投票する
9 に答える
39871 参照

database - 列が多すぎますか?

ここの多くの人々が、1つのテーブルに20以上(私は55も見たことがあります)の列を持つテーブルを引用していることに気づきました。今ではデータベース設計の専門家のふりをしていませんが、これは恐ろしい習慣だといつも聞いています。これを見ると、通常、1対1の関係で2つのテーブルに分割することをお勧めします。1つは最も頻繁に使用されるデータを含み、もう1つは最も頻繁に使用されないデータを含みます。同時に、パフォーマンスの問題が発生する可能性があります(JOINの減少など)。だから私の質問はこれです:

本当に大規模なデータベースに関して言えば、これは通常多くのNULL値につながるという事実にもかかわらず、実際には大量の列を持つことに利点がありますか?

パフォーマンスに影響を与えるのはどちらですか。NULLが多い列が多いのか、JOINが多い列が少ないのでしょうか。

0 投票する
6 に答える
3000 参照

mysql - 大きなテーブルを最適に処理できるデータベース(DBMS)はどれですか?

また、SQL Server(2008 R2 Developer Edition)には、パフォーマンスの問題がある非常に大きなテーブルがあります。

大きなテーブルを処理するには、別のDBMSの方が適しているのではないかと思いました。私は主に次のシステムのみを検討しています:SQL Server 2008、MySQL、およびPostgreSQL9.0。

または、上記の参照された質問が理解できないように、テーブルのサイズとパフォーマンスは主にインデックスとキャッシュの要因ですか?

また、正規化を大きくすると、パフォーマンスが向上しますか、それとも妨げになりますか?

編集:

以下のコメントの1つは、私が漠然としていたと主張しています。私は2000万行(20年の株式データと2年のオプションデータ)を持っており、パフォーマンスを桁違いに向上させる方法を見つけようとしています。私は読み取り/計算のパフォーマンスのみを気にします。書き込みパフォーマンスは気にしません。書き込みはデータの更新中のみであり、それらはBulkCopyです。

私はすでにいくつかのインデックスを持っていますが、物事を大幅にスピードアップする必要があるため、うまくいけば何か間違ったことをしています。私も自分のクエリを見始める必要があります。

提供されたコメントと回答は、データベースのプロファイリングを開始する方法を理解するのにすでに役立ちました。私はプログラマーであり、DBAではありません(したがって、Marcoの本の推奨事項は完璧です)。私はデータベースの経験があまりなく、データベースのプロファイルを作成したことはありません。これらの提案を試し、必要に応じて報告します。ありがとうございました!

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

postgresql - Postgresqlカスタム関数、phpは低速ですが、ginインデックスを使用したテキスト検索を使用してpsqlに直接入力すると高速になります

Person、Names、Notesの3つのテーブルがあります。各人には複数の名前があり、オプションのメモがあります。名前とメモのいくつかの列で全文検索を行っています(以下を参照)。検索する単語が結果セットまたはdbにある場合、これらは完全に機能しています。これは、カスタム関数、php、およびpsql用です。問題は、検索した単語がデータベースに存在しない場合、phpとカスタム関数ではクエリが非常に遅くなりますが、psqlでは高速になることです。psqlでは1秒未満、その他は10秒以上です。

テーブル:

PKおよびFKインデックスのほかに、fs_nameおよびfs_noteのGinインデックス。

関数/クエリ

where条件はここで切り捨てられます。たとえば、$ 1で「john&james」を実行し、データがdbにある場合、結果は高速ですが、「john and james」がdbにない場合は、低速になります。個人に100万件、名前に300万件以上のレコード(すべてダミーレコード)があるため、これは遅くなりました。これを修正する方法について何かアイデアはありますか?サーバーを再起動して、postgresqlを再起動してみました。

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

sql - サブクエリ結果のmysql単純集計が遅い

購入したアイテムの数に基づいてすべての顧客を「ビンに入れ」、各ビンの数を表示しようとしています。何人 (account_id) が 1 つのアイテムを購入したか、2 つのアイテムを購入した人の数、9 つのアイテム、そして 10 以上のアイテムを購入したかを確認しようとしています。

これが私が使用しているクエリです - その価値のために、結果を生成するためにクエリが売上に対してフルテーブルスキャンを実行することを期待していますが、プロセス全体が永遠にかかります!

私は Oracle のバックグラウンドを持っており、Oracle の場合と同じようにクエリを作成しました。

サブクエリを処理するときに mysql に落とし穴はありますか?

計画を説明する

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

mysql - MySQL - 最小 ID の行を効率的に取得するにはどうすればよいですか?

ORDER BY id LIMIT 1次のクエリで as を使用するよりも、特定の条件に一致する MySQL テーブルの最も古い行を更新するより高速な方法はありますか?

ノート:

  • 主キーがidであり、 にもインデックスがあるとしfield1ます。
  • 1 つの行を更新しています。
  • 厳密に最も古い行を更新するのではなく、条件に一致する最も古い行を更新しています。
  • 一致する最も古い行、つまり最も低い行、つまりidFIFO キューの先頭を更新したいと考えています。

質問:

  • ORDER BY id必要ですか?MySQL はデフォルトでどのように注文しますか?

実際の例

電子メール キューに使用される DB テーブルがあります。ユーザーに送信する電子メールをキューに入れる場合、行が追加されます。行は cron ジョブによって削除され、毎分実行され、その分で可能な限り処理され、行ごとに 1 つの電子メールが送信されます。

このアプローチをやめて、 GearmanResqueなどを使用して電子メール キューを処理する予定です。しかし、それまでの間、キューの最も古いアイテムを処理のために効率的にマークする方法について質問があります。これは、ID が最小の行とも呼ばれます。このクエリは次のように機能します。

ただし、スケーリングの問題により、mysql のスロー ログに頻繁に表示されます。テーブルに 500,000 行ある場合、クエリに 10 秒以上かかることがあります。問題は、このテーブルが最初に導入されて以来、非常に大きくなり、現在では 50 万行と 133.9 MiB のオーバーヘッドがあることです。たとえば、6000 行の新しい行をおそらく 1 日に 180 回 INSERT し、ほぼ同じ数を DELETE します。

スロー ログに表示されるクエリを停止するために、 を削除して、ORDER BY idテーブル全体の大規模な並べ替えを停止しました。すなわち

...しかし、新しいクエリは常に最小の id を持つ行を取得するわけではありません (ただし、頻繁に取得します)。を使用する以外に、最も低い ID を持つ行を取得するより効率的な方法はありORDER BY idますか?

参考までに、これは電子メール キュー テーブルの構造です。