1

フリート管理システムのデータベースを設計しています。

n3秒ごとにレコード数を取得します。明らかに、テーブルに何百万ものレコードがあり、車両の現在の情報をテーブルに保存しcurrent_locationます。ここでは、パフォーマンスが大きな問題です。

これを解決するために、次の提案を受け取りました。

  1. 車両ごとに個別のテーブルを作成します。ここでは、新しいテーブルの作成をクリックするとすぐに、実行時にテーブルが作成されます。特定のテーブルに関連するすべてのデータが挿入され、その特定のテーブルから取得されます。

  2. パーティションに行きます。


これらのソリューションについて、次の質問に答えてください。

  1. 両者の違いは何ですか?

  2. どちらが最適で、その理由は?

  3. テーブル内の行数によってパフォーマンスの問題が発生するのはどの時点ですか?

  4. 他の解決策はありますか?

さて --- SQL Server 2008 でレンジ パーティションを使用する場合、どうすればよいでしょうか。

  1. varchar(20) を使用して分割します。

  2. 車両番号別に仕分けをする予定です。例: MH30 q 1234。mh30 q 1234 としましょう - 30 & q だけが変化します....だから私の質問は、どうすればいいのかです。パーティション関数の書き方を意味します。

***最初に、この質問は私のSQLについて尋ねられました..今はSQLサーバーについてです********申し訳ありませんが、SQLからSQLサーバーに移行しました*****同じ質問で

4

4 に答える 4

2

必ずパーティショニングを使用してください。mysql が答えてくれるのに、質問に答えるためにどのテーブルを使用するかをわざわざ考え出す必要はありません。パーティショニングを使用していない場合は、すべてのトラックの現在の場所を見つけてください!

  1. パーティショニングにより、複数のテーブルのパフォーマンス上の利点が得られますが、自動プルーニング (クエリへの回答に必要なテーブルのみの選択) を使用できます。

  2. 「最高」のものはありません。質問は、あなたの問題に最適なものは何ですか?

  3. これは答えられません。システムのパフォーマンスの問題を監視し、必要に応じてサーバーの設定や規模を調整するだけです。

  4. 少なくとも mysql に関する限り、パーティショニングに勝るものはありません!

于 2009-10-29T13:22:50.353 に答える
1

1日あたり28,800行のパーティション分割を気にしないでください。

私たちは(まだ)1日あたり500万を超えていません。(「まだ」とは、彼らがどのようなデータ保持ポリシーを望んでいるかについて、ビジネス上の意見がないことを意味します)

于 2009-11-02T09:27:18.940 に答える
0

車両ごとに個別のテーブルを作成する場合と、車両 ID を主キーの最初のフィールドにする場合のパフォーマンスの違いはほとんどありません。どちらの方法でもディスク上で同じグループ化が得られ、mysql はテーブル内の何百万行にも問題がないはずです。

パーティションは、マシンに複数のディスクがあり、複数のディスクに負荷を分散したい場合にのみ役立ちます。

したがって、私の答えはどちらもしないことだと思います。アプリオリにこれを設計するのはやり過ぎのようです。

于 2009-10-29T21:04:28.543 に答える
0

私が指摘したいことの 1 つは、1 つのテーブル (後で必要に応じて分割できる) を使用すると、データベースとデータのクエリの両方で維持するのがはるかに簡単になるということです。

于 2010-06-29T19:20:29.373 に答える