問題タブ [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.
sql - SQL削除のパフォーマンスの向上
idフィールド(主キー)に基づいてテーブルからいくつかの行を削除するクエリがあります。これは非常に単純なクエリです。
問題は、IDの数が膨大になる可能性があることです(例:70k)。そのため、クエリに長い時間がかかります。これを最適化する方法はありますか?(私たちはsybaseを使用しています-それが重要な場合)。
sql-server - テーブルに多くの (20 以上の) 外部キー制約がある場合、何か欠点がありますか?
他の「値テーブル」の値にリンクされた多くのフィールドを持つテーブルがあるとしましょう。当然のことながら、完全性を確保するために、それぞれに外部キー制約を宣言します。
最終的にそのようなフィールドの数が 20 ~ 30 の範囲になったらどうしますか? どういうわけかテーブル操作を「遅く」しますか、それとも実際にはそうではありませんか?
追加: 値テーブルには、通常 5 ~ 10 程度の少数のレコードしかないと予想されます。データベースは SQL Server 2008 です。
sql - マイクロブログのスタートアップのためのデータベース
私はマイクロブログWebサービスを行います(学校用なので、新しいアイデアがないからといって私を非難しないでください)。DBが過負荷になることが多いのではないかと心配しています(ユーザーは他のユーザーをフォローしたり、タグを付けたりできるので、SELECT
重くなると思います-確認してください)すべての観測タグとユーザーを含む 20 個の最新メッセージ)。
私の考えは、別のテーブルを作成し、そこに statusID と userID (誰がメッセージを受け取るべきか) だけを保存することです。その危険性は、一部のタグまたはユーザーに多くのフォロワーがいる場合、そのステータス ID を持つ多くのレコードが存在することです。それで、それは良い考えですか?それとも、M2M 関係を使用したほうがよいのでしょうか。(1 つのステータス -> 複数の受信者)
c# - この linq to entity クエリを最適化して、応答時間を短縮するにはどうすればよいでしょうか?
非常に長いクエリがあり、書籍の取得と並べ替えに多くの時間がかかります。パフォーマンス テストの後、このクエリを含むページの応答時間が 10 秒を超えることがわかりました。これを解決して応答を減らす必要があります。時間。
誰か提案はありますか?
mysql - 1 つのテーブル列に大量のデータ (<=4GB) を格納できます。しかし、それは良い考えですか?
簡単に言うと、私が取り組んでいるアプリケーションの一部は、アプリケーションの別の部分が後で取得できるように、ある程度大量のデータをデータベースに格納する必要があります。通常、これは 2000 行未満ですが、場合によっては 300,000 行を超えることがあります。データは一時的に保存する必要があり、後で削除できます。
色々と考えていて、今日ふと思いついたことがあります。データ型はLONGTEXT
最大 2^32 バイト (4 GB に相当) を格納できます。さて、1 つの表の行に詰め込むには多くの情報が必要です。データはおそらく最大でも 60 ~ 80 MBを超えることはありません。しかし、私の質問は、実際にそれを行うのは良い考えですか?
私が現在使用しようとしている2つのソリューションは、次のようなものです。
- すべてのデータを個々の行として「一時」テーブルに挿入し、終了後に切り捨てます。
LONGTEXT
すべてのデータをシリアル化された文字列として、終了後に削除される行の列に挿入します。
純粋にパフォーマンスの観点から、データを潜在的に 300,000 を超える個々の行として保存するか、60 MBLONGTEXT
のエントリとして保存する方がよいでしょうか?
LONGTEXT
それがウォッシュである場合、データを取得するアプリケーションの部分を書きやすくするため、おそらくオプションを使用します。また、アプリケーションの全体的なパフォーマンスを向上させるさらに別の部分との連携も強化されます。
これについて何か考えていただければ幸いです。
language-agnostic - 定期的なパフォーマンスの調整とメンテナンス
アプリケーションのストレス テストやアプリケーションのデータベース インデックスの調整など、定期的なメンテナンスをどのくらいの頻度で実施していますか?
たとえば、データベース インデックスを週に 1 回、6 か月ごとに調整 (デフラグ、再編成、または再構築) しますか、それとも大量のデータが入力された後にのみ行いますか? また、メジャーまたはマイナー ビルドごとに、毎週、毎年、アプリケーションのストレス テストを行いますか?一度もない?
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 =>限)
私の質問:
JOIN をサポートしているが、はるかに高速な MySQL のような代替データベースはありますか? (Postgre があることは知っていますが、まだ評価中です。)
それ以外の場合、MySQL インスタンスを起動し、ローカル データベースをメモリにロードし、5 分ごとに再ロードすることは役に立ちますか?
それ以外の場合、この操作全体を 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 FROM
ads
ads.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/実行計画:
(これは開発データベース上にあり、本番バージョンほど多くの行はありません。)
定義された指標:
sql-server - SQL Serverの実行時間は何を表していますか?
2つの同等のデータベースで実行しているが、別々のMSSQL2005サーバーでホストされているクエリがあります。両方のサーバーでクエリの時間を測定したいので、次のことを試しました。
そして、次の結果が得られました。
私の質問は、SQL Serverの実行時間とはどういう意味ですか?データベースでのクエリの実行のみですか、それともSQL Server Management Studioを実行しているクライアントへのデータの転送を含むクエリの実行ですか?
よろしくお願いします!
sql - 非常に大きなテーブルでのパフォーマンスの問題は、効果的なインデックス作成によってどの程度克服できますか?
したがって、10k レコードのテーブルに対するクエリと 10mil レコードのテーブルに対するクエリは、どちらもほぼ同じ数のレコードをフェッチし、単純なインデックス (自動インクリメント、自動インクリメント、レコード ID タイプのインデックス付きフィールド)。
私の質問は、適切にインデックスが作成され、クエリが常にそれらのインデックスを効果的に使用するようにデータベースが設定されている場合、これは 40 億件近くのレコードを持つテーブルに拡張されますか?
また、非常に大きなインデックス付きテーブルに新しいレコードを挿入すると、すべてのインデックスを再計算する必要があるため、非常に遅くなる可能性があることを知っています。テーブルの最後にのみ新しいレコードを追加すると、速度低下を回避できますかインデックスがバイナリ ツリーであり、ツリーの大きなチャンクを再計算する必要があるため、機能しませんか?
最後に、非常に大きなテーブルの操作に関するよくある質問/注意事項を少し調べましたが、実際には見つかりませんでした。そのようなことを知っている人がいれば、そのリンクをいただければ幸いです。
mysql - MySQL: JOIN & ORDER BY クエリでのインデックスの使用
stackoverflow の Q&A 機能に似たシステムがあります。主な違いは、各質問に有効期限があることです。
スコア順に並べられた、有効期限が切れていない上位 N 個の回答と一緒に質問を表示したいと考えています。私はこのようなことを考えています:
いくつかの質問:
1) 上記のクエリは、私がやりたいことを行うための最も効率的な方法ですか? 次のように JOIN を明示的に使用する場合とどう違うのですか。
2) クエリでインデックスを使用するにはどうすればよいですか? このインデックスをTABLEの回答に追加することを考えています:
上記のインデックスは私のクエリで機能しますか? スコアを降順にする必要があるのに、expiration_datetime が昇順であるため、正しくないようです。ここで何ができますか?