4


2

Access Databaseのパフォーマンスに影響を与えるのは、何千ものテーブルまたは何百万ものレコードですか?

ソフトウェア製品のバックエンドとしてAccessデータベースを使用しています。 このプログラムは、約2年間、会社でアルファ/ベータテストされており、テーブルの1つがその時点で10万件以上のレコードで満たされていることに気付きました。 これはおそらく、当社の製品が耐える最も重い使用法の例ではなく、5〜10年後のパフォーマンスが懸念されます。

この巨大なテーブルを数百のレコードを含む数千のテーブルに分割する論理的な方法がありますが、このソリューションはデータベースがデータではなくテーブルで肥大化するので、スローダウンの可能性があるとは思わないデータベースに関する正式なトレーニングは受けていませんが、何を知っていますか)。

大幅なスローダウンが発生する可能性があるかどうかについての洞察を提供するよりも多くの人に情報を提供してくれることを期待していました。

5 Answer


2


データベースは通常、多数の行を処理するように最適化されています。問題は、ほぼ同一の数千のテーブルを維持できるかどうかです。 (できることはほとんどなく、コーディングが複雑です)

まず、考えられるシナリオをテストします。 私はあなたのデータに精通していないので、数百万の行がdbには多すぎるかどうかを判断できません(結局、これは実際のデータベースではなくMS Accessです)。

テーブルサイズに問題があり、データセットを使用頻度の低い(古い?)データと最近のデータに分割できる場合は、テーブルをtableとtable_archived(使用頻度の低い/古いレコードを含む)の2つに分割することをお勧めします。 これは、テーブルサイズと管理性の間の合理的な妥協点となる可能性があります。


1


テーブルを壊すのはやり過ぎのように聞こえますが、http://www.windowsitpro.com/article/windows-client/horizo​​ntal-and-vertical-partitioning.aspx [horizo​​ntal partitioning]は非常に健全なパフォーマンス最適化戦略です。多くのデータベースプラットフォームで使用されます。

MS Accessを使用すると、数百万行の場合でも、読み取り用に適切に設計されたデータベースのパフォーマンスが大幅に低下することはありません。 また、多くのテーブルを使用しても、頻繁に圧縮して修復する場合でも、パフォーマンスの問題に関してはあまり問題になりませんが、大きな問題はメンテナンスの複雑さです。 少なくとも100万行が含まれるまで、および/またはそのテーブルのクエリでパフォーマンスの問題を示すまで、テーブルを分割しないことをお勧めします。

問題は次のとおりです。このタイプのパーティション分割は、ユーザーがUNIONに戻す必要があるパーティション内の複数のテーブルに対して常にクエリを実行している場合、パフォーマンスを大幅に低下させる可能性があります。 頻繁に検索されないアーカイブレコードがパーティションに含まれている状況では、はるかにうまく機能します。 テーブル間で頻繁にクエリを実行する必要があると思われる場合は、そこに行かないでください。

最大のスケーラビリティのハードルは、ユーザーの数に関係します。 何百人ものユーザーを予想している場合は、非常に慎重に計画するか、クライアントサーバーデータベースバックエンドを検討する必要があります。


1


質問はスキーマの質問であり、検討しているテーブルのパーティション分割が実際のデータに自然に適合しない場合、パフォーマンスの問題を悪化させるのではなく、改善します。 2GBのファイルサイズの制限に関しては、データをどのようにスライスしてさいの目に切るかは重要ではありません-その制限に近づいている場合(その50%以内、私は言うでしょう)、あなたは本当に持っている必要がありますパスのアップサイジング。

Jet / ACEデータストアの問題については、数十万件のレコードを持つテーブルを持つアプリはすべて、既にアップサイズの評価が必要なアプリであると言えます。 数百万件のレコードが可能/可能性が高い場合、それは簡単でアップサイズだと思います。

これは、要件が変わると適切な技術が変わるという理由だけで、Jet / ACEの不備が原因ではありません。 結婚したカップルは結婚するとミニクーパーを見つけることができ、最初の子供をうまく収容できるかもしれませんが、さらに数人の子供を考えている場合は、何かが間違っているからではなく、より大きな車を買うことを真剣に検討する必要がありますミニクーパーを使用しますが、彼らはそれが何のために最適であるかを生やしているからです。


0


_ このプログラムは、約2年間、会社でアルファ/ベータテスト済みです。 _

過去約10年間、Microsoftは人々にAccessをデータベースとして使用するのではなく、さまざまなバージョンのSQL Serverを使用することを勧めてきました。

_ 5〜10年後のパフォーマンスが心配です _

lat-hm-10年の開発を考えると、私はそうではないでしょう。 私は、Accessが実際に今後10年間で実際にデータを保存できるのか、それとも呼び出しが「sqlサーバー用プログラム」であるのかを真剣に懸念しています。

_ この巨大なテーブルを数百のレコードを含む数千のテーブルに分割する論理的な方法はありますが、このソリューションはデータベースがデータではなくテーブルで肥大化するため、スローダウンの可能性があるとは思わない _

Accessは、100万または500万のレコードを処理できます。 SQL Serverは、数十億件のレコードに適しています。 Accessで問題が発生した瞬間、基本的に、あなたはに基づいてあなたが得る問題を獲得します-そして私はそれをもっとうまく言う方法を本当に見つけられません-私のように-深刻なデータベースのためにアクセスを使用しようとする途方もない無知すでに述べた-MSは過去10年間これを思いとどまらせている。

テーブルを分割する何千ものテーブルは賢明ではありません。 SQLデータベースはこのために設計されていません。 SQL Server Enterpriseでクラスター化されたテーブルを使用する(正確にこれを行う)場合でも、実際には数万のパーティションがあることをターゲットにしていません。

あなたはアクセスで死ぬだけの可能性が高いです-アクセスは単にデータベースサーバーではありません。 ふりだしに戻る。

とは言っても、約18年前にAccessがFoxProで取得した技術を追加して、数百万のレコード(数千から数億)を含むテーブルを簡単に処理できるようになったため、現時点では非常に安全ですデータベースの修復、バックアップなどを行います。 そのようなもの、またはネットワーク共有を介してマルチユーザーアプリケーションを実行する悪夢でさえ。

SQL Server、私は現在、約6億5,000万レコードのテーブルがあり、データロードが開始される次の6か月で約100億から200億に成長しました。これまでのところ問題はありません。


0


このスレッドでアクセス-v- SQLサーバーの議論に入ることは避け、代わりにOPの質問に答えます。

データを分割でき、それらの分割に対してクエリを実行しない場合は、テストする価値があるかもしれませんが、アクセスできるオープンテーブルの数は2048に制限されているため、注意が必要です。

しかし、何かの最大数を尋ねなければならない場合、それが間違っている可能性があると言われていますが、これはその例だと思います。 それが10個のテーブルに分割されていた場合、おそらく数千個ですか? 私はそれを渡します