0

对于非常非常大的表,索引可能有很大帮助。但是数据库中的小表太多的解决方案是什么。?

如果我有一个很大的数据库,里面有太多的表怎么办。我怎样才能使查询快速,因为索引有助于加快表的查询?

让我们用一个真实的例子来谈谈。在 stackoverflow.com ,有一张桌子说。“问题”。有身份证,日期,投票。 然后在 questions 表中存在每个 id的表。(此表将具有数字 id 的名称。例如,“ q-45588 ”)现在很容易索引“问题”表。但是每个问题 id 的这么多子表呢?(可能包含 id、答案 1、答案 2、答案 3、评论 1、评论 2……投票、否决票、日期、标志等等)?

这就是通常的帐户软件中发生的情况。IE。具有所有债务人 id 的债务人帐户表,并且每个表都针对每个该 id 存在(具有债务人的更多详细信息)

还是设计问题? *更新* ----------------- 有人可能会说全部在 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

你有一个设计问题。拥有多个具有相同列的表应该立即敲响警钟——拥有多个具有相同唯一键的表也应该如此。

在您给出的示例中,您应该有一个子表。

现在,在某些情况下,您可能拥有一个表,其中包含一个或多个不同值,这些值代表大部分表行。例如,假设您有 50 位客户的销售,但其中一位负责 40% 的总销售记录,其他客户平均分配给其他客户。通过customer_id 上的索引访问较小客户的数据是有意义的,但对于大客户而言则不然。在这种情况下,您可能会考虑对表进行分区以将大客户的记录放在一个子表中,将其他记录放在另一个子表中,两者都与主表相关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 回答