0

非常に大きなテーブルの場合、インデックス作成が非常に役立つ場合があります。しかし、データベース内の小さなテーブルが多すぎる場合の解決策は何ですか? ?

テーブルが多すぎる大規模な DB がある場合はどうなりますか。インデックスがテーブルのクエリを高速化するのに役立つため、クエリを高速化するにはどうすればよいですか?

実際の例で話しましょう。stackoverflow.com には、言うテーブルがあります。「質問」。ID、日付、投票を持っています。次に、質問テーブルに各 ID のテーブル が存在します。(このテーブルは数値 ID の名前になります。例: " q-45588 ") "questions"テーブルに簡単にインデックスを付けることができます。しかし、各質問 id の非常に多くの子テーブルについてはどうでしょうか。(ID、回答 1、回答 2、回答 3、コメント 1、コメント 2... 投票、反対票、日付、フラグなど、さまざまなものが含まれる場合があります) ?

これは、通常のアカウント ソフトウェアで発生することです。すなわち。すべての債務者の ID を持つ債務者アカウント テーブルと、その ID ごとに各テーブルが存在する (債務者の詳細を含む)

それとも設計上の問題ですか? * update * ----------------- 一部の人々は、質問テーブル、回答テーブル、コメント テーブルなど、 3 つまたは 4 つのテーブル (何行もある可能性があります) ですべてを行うと言うかもしれません。ユーザー テーブル。

変更されたスタックの例を次に示します

Catagory of thread:-----info----

Question
Discussion

Catagory of Thread Response:----info-----

A  Answer
c  comment


Theads:----A table-----

Id (key)
Thread Id number (Long data type)
status (active,normal,closed(visible but not editable), deleted, flagged, etc.
type (Ques / Dis)
votes Up
vots Down
count of views
tag 1
tag 2
tag 3
Subject
body
maker ID
date time stramp of time creation
date time stramp of time last activity
A  Answer count
c  comment count




Thread: (table name is thread id (long data type) (in Threads table)----A table-----

id (key)
response text
response type (    A  Answer / c  comment)
vote up
vote down
abuse count
4

3 に答える 3

4

通常、インデックスは、検索するための順序付けられた構造を提供することにより、検索を高速化することを目的としています。非常に小さなテーブルでは、検索は最初から高速である必要があるため、あまり意味がない場合があります。あなたの最善の策は、インデックスの有無にかかわらず試して、それに応じて測定することです。

そうは言っても、小さなテーブルがまったく同じ構造を持っている場合は、(とにかく RDBMS の観点から) それらを単一のエンティティにマージする方が理にかなっている可能性があります。

于 2013-01-23T02:24:15.857 に答える
1

あなたが持っているものは設計上の問題です。同じ列を持つ複数のテーブルを持つことは、すぐに警鐘を鳴らす必要があります。同じ一意のキーを持つ複数のテーブルを持つことも同様です。

あなたが与える例では、単一の子テーブルが必要です。

ここで、場合によっては、テーブル行の大部分を表す 1 つ以上の個別の値を持つテーブルがある場合があります。たとえば、50 人の顧客の売上があるが、そのうちの 1 人が総売上レコードの 40% を担当し、他の顧客は他の顧客に均等に分配されているとします。customer_id のインデックスを介して小規模な顧客のデータにアクセスすることは理にかなっていますが、大規模な顧客には当てはまりません。その場合、大規模な顧客のレコードを 1 つの子テーブルに配置し、他のレコードを別の子テーブルに配置するためにテーブルを分割することを検討できます。両方ともマスター テーブルhttp://www.postgresql.org/docs/9.2/static/に関連付けられています。 ddl-partitioning.html .

ただし、一般的に、最初の設計では、これらの子レコードに対して単一の非パーティション テーブルを使用する必要があります。

于 2013-01-23T08:57:16.213 に答える
0

このドキュメントが役立つかもしれません。

http://dev.mysql.com/doc/refman/5.0/en/table-cache.html

実際、MySQL やその他の RDBMS は、多くのテーブルではなく、大きなテーブルの処理に重点を置いていますよね? 非常に多数のテーブルを処理する場合は、NoSQL ソリューションを検討する必要があります。

于 2013-01-23T02:18:59.717 に答える