快速查询数据库中的过多表

时间:2013-01-23 02:02:51

标签: mysql database oracle postgresql

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

如果我有一个大型数据库,其中包含太多表,该怎么办?如何快速进行查询,因为索引可以帮助加快表的查询?

让我们谈谈一个真实的例子。 在stackoverflow.com中,有一张表说。 “的问题”。 id,date,votes。然后在问题表中存在每个ID的表。 (此表将具有数字ID的名称。例如“ q-45588 ”)现在很容易索引“问题”表。但是每个问题ID的子表多少。 (可能包含ids,答案1,答案2,答案3,评论1,评论2 ......投票,下选票,日期,旗帜,这么多东西)?

通常的帐户软件会发生这种情况。即。债务人账户表中包含所有债务人的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

3 个答案:

答案 0 :(得分:5)

通常,索引旨在通过提供和有序搜索结构来加快搜索速度。在一个非常小的表中,由于搜索应该很快开始,它可能没有多大意义。你最好的选择是尝试使用和不使用索引,并相应地进行测量。

话虽如此,如果您的小表具有相同的确切结构,那么将它们合并为单个实体可能更有意义(从RDBMS的角度来看)。

答案 1 :(得分:1)

你有什么设计问题。拥有相同列的多个表应该立即引发警报 - 同时应该有多个具有相同唯一键的表。

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

现在,在某些情况下,您可能会有一个包含一个或多个不同值的表,这些值表示很大一部分表行。例如,假设您有50个客户的销售额,但其中一个负责销售总记录的40%,其他客户之间均匀分配。通过customer_id上的索引访问较小客户的数据是有道理的,但它不适用于大客户。在这种情况下,您可能会考虑对表进行分区,以将大客户的记录放在一个子表中,将其他记录放在另一个子表中,这两个记录都与主表http://www.postgresql.org/docs/9.2/static/ddl-partitioning.html相关。

但是,一般而言,对于初始设计,您应该为这些子记录使用单个非分区表。

答案 2 :(得分:0)

也许这份文件可以帮到你。

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

实际上,MySQL和其他RDBMS都专注于处理大表,而不是很多表,对吧?如果要处理极大量的表,则应考虑使用NoSQL解决方案。