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

sql - SQL削除のパフォーマンスの向上

idフィールド(主キー)に基づいてテーブルからいくつかの行を削除するクエリがあります。これは非常に単純なクエリです。

問題は、IDの数が膨大になる可能性があることです(例:70k)。そのため、クエリに長い時間がかかります。これを最適化する方法はありますか?(私たちはsybaseを使用しています-それが重要な場合)。

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

sql-server - テーブルに多くの (20 以上の) 外部キー制約がある場合、何か欠点がありますか?

他の「値テーブル」の値にリンクされた多くのフィールドを持つテーブルがあるとしましょう。当然のことながら、完全性を確保するために、それぞれに外部キー制約を宣言します。

最終的にそのようなフィールドの数が 20 ~ 30 の範囲になったらどうしますか? どういうわけかテーブル操作を「遅く」しますか、それとも実際にはそうではありませんか?

追加: 値テーブルには、通常 5 ~ 10 程度の少数のレコードしかないと予想されます。データベースは SQL Server 2008 です。

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

sql - マイクロブログのスタートアップのためのデータベース

私はマイクロブログWebサービスを行います(学校用なので、新しいアイデアがないからといって私を非難しないでください)。DBが過負荷になることが多いのではないかと心配しています(ユーザーは他のユーザーをフォローしたり、タグを付けたりできるので、SELECT重くなると思います-確認してください)すべての観測タグとユーザーを含む 20 個の最新メッセージ)。

私の考えは、別のテーブルを作成し、そこに statusID と userID (誰がメッセージを受け取るべきか) だけを保存することです。その危険性は、一部のタグまたはユーザーに多くのフォロワーがいる場合、そのステータス ID を持つ多くのレコードが存在することです。それで、それは良い考えですか?それとも、M2M 関係を使用したほうがよいのでしょうか。(1 つのステータス -> 複数の受信者)

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

c# - この linq to entity クエリを最適化して、応答時間を短縮するにはどうすればよいでしょうか?

非常に長いクエリがあり、書籍の取得と並べ替えに多くの時間がかかります。パフォーマンス テストの後、このクエリを含むページの応答時間が 10 秒を超えることがわかりました。これを解決して応答を減らす必要があります。時間。

誰か提案はありますか?

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

mysql - 1 つのテーブル列に大量のデータ (<=4GB) を格納できます。しかし、それは良い考えですか?

簡単に言うと、私が取り組んでいるアプリケーションの一部は、アプリケーションの別の部分が後で取得できるように、ある程度大量のデータをデータベースに格納する必要があります。通常、これは 2000 行未満ですが、場合によっては 300,000 行を超えることがあります。データは一時的に保存する必要があり、後で削除できます。

色々と考えていて、今日ふと思いついたことがあります。データ型はLONGTEXT最大 2^32 バイト (4 GB に相当) を格納できます。さて、1 つの表の行に詰め込むには多くの情報が必要です。データはおそらく最大でも 60 ~ 80 MBを超えることはありません。しかし、私の質問は、実際にそれを行うのは良い考えですか?

私が現在使用しようとしている2つのソリューションは、次のようなものです。

  • すべてのデータを個々の行として「一時」テーブルに挿入し、終了後に切り捨てます。
  • LONGTEXTすべてのデータをシリアル化された文字列として、終了後に削除される行の列に挿入します。

純粋にパフォーマンスの観点から、データを潜在的に 300,000 を超える個々の行として保存するか、60 MBLONGTEXTのエントリとして保存する方がよいでしょうか?

LONGTEXTそれがウォッシュである場合、データを取得するアプリケーションの部分を書きやすくするため、おそらくオプションを使用します。また、アプリケーションの全体的なパフォーマンスを向上させるさらに別の部分との連携も強化されます。

これについて何か考えていただければ幸いです。

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

language-agnostic - 定期的なパフォーマンスの調整とメンテナンス

アプリケーションのストレス テストやアプリケーションのデータベース インデックスの調整など、定期的なメンテナンスをどのくらいの頻度で実施していますか?

たとえば、データベース インデックスを週に 1 回、6 か月ごとに調整 (デフラグ、再編成、または再構築) しますか、それとも大量のデータが入力された後にのみ行いますか? また、メジャーまたはマイナー ビルドごとに、毎週、毎年、アプリケーションのストレス テストを行いますか?一度もない?

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

mysql - 結合を使用する場合、MySQL データベースを大幅に最適化 (または置換) するにはどうすればよいでしょうか?

非常に大量の状況に近づいたのはこれが初めてです。これは MySQL ベースの広告サーバーです。ただし、使用されるクエリには多くの JOIN が組み込まれており、通常はただ遅いだけです。(これは Rails ActiveRecord です)

sel = Ads.find(:all, :select => '*', :joins => "ads.campaign_id = キャンペーン.id でキャンペーンに参加 キャンペーン.user_id = users.id でユーザーに参加 LEFT JOIN 国で国に参加.campaign_id = Campaign.id LEFT JOIN キーワード ON キーワード.campaign_id = キャンペーン.id", :conditions => [flashstr + "keywords.word = ? AND ads.format = ? AND キャンペーン.cenabled = 1 AND (countries.country IS NULL OR countries .country = ?) AND ads.enabled = 1 AND Campaigns.dailyenabled = 1 AND users.uenabled = 1", kw, format, viewer['country'][0]], :order => order, :limit =>限)

私の質問:

  1. JOIN をサポートしているが、はるかに高速な MySQL のような代替データベースはありますか? (Postgre があることは知っていますが、まだ評価中です。)

  2. それ以外の場合、MySQL インスタンスを起動し、ローカル データベースをメモリにロードし、5 分ごとに再ロードすることは役に立ちますか?

  3. それ以外の場合、この操作全体を Redis または Cassandra に切り替えて、何らかの方法で JOIN 動作を変更して、NoSQL の (JOIN できない) 性質に一致させる方法はありますか?

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


編集:ここに詳細があります:

フラット化された選択で完全に実行された SQL (上で切り捨てられています):

SELECT キャンペーン.id、キャンペーン.guid、キャンペーン.user_id、キャンペーン.dailylimit、キャンペーン.インプレッション、キャンペーン.cenabled、キャンペーン.dayspent、キャンペーン.dailyenabled、キャンペーン.fr、ads.id、ads.guid、ads.user_id、ads .campaign_id、ads.format、ads.enabled、ads.datafile、ads.data1、ads.data2、ads.originalfilename、ads.aid、ads.impressions、countries.id、countries.guid、countries.campaign_id、countrys.country 、keywords.id、keywords.campaign_id、keywords.word、keywords.bid FROMadsads.campaign_id = キャンペーン.id でキャンペーンを結合 キャンペーンでユーザーを結合.user_id = users.id 国で左結合 国.キャンペーン_id = キャンペーン.id 左結合 キーワードでキーワードを結合' AND ads.format = 10 AND Campaign.cenabled = 1 AND (countries.country IS NULL OR countries.country = 82) AND ads.enabled = 1 AND Campaigns.dailyenabled = 1 AND users.uenabled = 1 AND ads.datafile ! = '') ORDER BY キーワード.bid DESC LIMIT 1,1

EXPLAIN/実行計画:

(これは開発データベース上にあり、本番バージョンほど多くの行はありません。)

定義された指標:

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

sql-server - SQL Serverの実行時間は何を表していますか?

2つの同等のデータベースで実行しているが、別々のMSSQL2005サーバーでホストされているクエリがあります。両方のサーバーでクエリの時間を測定したいので、次のことを試しました。

そして、次の結果が得られました。

私の質問は、SQL Serverの実行時間とはどういう意味ですか?データベースでのクエリの実行のみですか、それともSQL Server Management Studioを実行しているクライアントへのデータの転送を含むクエリの実行ですか?

よろしくお願いします!

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

sql - 非常に大きなテーブルでのパフォーマンスの問題は、効果的なインデックス作成によってどの程度克服できますか?

したがって、10k レコードのテーブルに対するクエリと 10mil レコードのテーブルに対するクエリは、どちらもほぼ同じ数のレコードをフェッチし、単純なインデックス (自動インクリメント、自動インクリメント、レコード ID タイプのインデックス付きフィールド)。

私の質問は、適切にインデックスが作成され、クエリが常にそれらのインデックスを効果的に使用するようにデータベースが設定されている場合、これは 40 億件近くのレコードを持つテーブルに拡張されますか?

また、非常に大きなインデックス付きテーブルに新しいレコードを挿入すると、すべてのインデックスを再計算する必要があるため、非常に遅くなる可能性があることを知っています。テーブルの最後にのみ新しいレコードを追加すると、速度低下を回避できますかインデックスがバイナリ ツリーであり、ツリーの大きなチャンクを再計算する必要があるため、機能しませんか?

最後に、非常に大きなテーブルの操作に関するよくある質問/注意事項を少し調べましたが、実際には見つかりませんでした。そのようなことを知っている人がいれば、そのリンクをいただければ幸いです。

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

mysql - MySQL: JOIN & ORDER BY クエリでのインデックスの使用

stackoverflow の Q&A 機能に似たシステムがあります。主な違いは、各質問に有効期限があることです。

スコア順に並べられた、有効期限が切れていない上位 N 個の回答と一緒に質問を表示したいと考えています。私はこのようなことを考えています:

いくつかの質問:

1) 上記のクエリは、私がやりたいことを行うための最も効率的な方法ですか? 次のように JOIN を明示的に使用する場合とどう違うのですか。

2) クエリでインデックスを使用するにはどうすればよいですか? このインデックスをTABLEの回答に追加することを考えています:

上記のインデックスは私のクエリで機能しますか? スコアを降順にする必要があるのに、expiration_datetime が昇順であるため、正しくないようです。ここで何ができますか?