sql >> データベース >  >> RDS >> Sqlserver

5億行を超える行を処理できるデータベース

    MSSQLは、その数の行を適切に処理できます。クエリ時間は、単純な行数だけでなく、はるかに多くの要因に完全に依存しています。

    たとえば、以下に依存します:

    1. これらのクエリが行う結合の数
    2. インデックスがどの程度適切に設定されているか
    3. マシンに搭載されているRAMの量
    4. プロセッサの速度と数
    5. ハードドライブのタイプとスピンドル速度
    6. クエリで返される行のサイズ/データの量
    7. ネットワークインターフェースの速度/遅延

    クエリの実行に数分かかる小さな(10,000行未満)テーブルを作成するのは非常に簡単です。たとえば、合計512MBのRAMを備えたAtomプロセッサで、多くの結合、where句の関数、およびゼロインデックスを使用します。;)

    すべてのインデックスと外部キーの関係が良好であること、不要な関数呼び出しを排除し、実際に必要なデータのみを返すようにクエリが最適化されていることを確認するには、もう少し作業が必要です。また、高速なハードウェアが必要です。

    それはすべて、あなたが費やしたい金額、開発チームの質、そしてあなたが扱っているデータ行のサイズに要約されます。

    更新 質問の変更による更新。

    ここでの情報の量は、現実世界の答えを与えるにはまだ十分ではありません。テストし、必要に応じてデータベースの設計とハードウェアを調整する必要があります。

    たとえば、これらの仕様のマシンのテーブルに10億行を簡単に配置し、「select top(1)id from tableA(nolock)」クエリを実行して、ミリ秒単位で回答を得ることができます。同様に、「select * from tablea」クエリを実行できます。クエリはすばやく実行されますが、すべてのデータをネットワーク経由で転送するには時間がかかるため、時間がかかります。

    ポイントは、テストする必要があるということです。つまり、サーバーをセットアップし、いくつかのテーブルを作成して、それらにデータを入力します。次に、クエリとインデックスを正しく取得するために、パフォーマンスの調整を行う必要があります。パフォーマンスチューニングの一環として、クエリを再構築する方法だけでなく、ロックに基づいてマシンのどの部分(ディスク、RAM、CPUなど)を交換する必要があるかを正確に明らかにします。と待機タイプ。

    これを行うには、1つまたは2つのDBAを雇う(または契約する)ことを強くお勧めします。



    1. MySQL FIND_IN_SETまたは同等のものにインデックスを使用させることはできますか?

    2. 親行を削除または更新できません:外部キー制約が失敗します

    3. データベース接続は常に開いたままにする必要がありますか、それとも必要な場合にのみ開く必要がありますか?

    4. DBAの生涯についての陽気なツイート