存储大量数据以便快速请求的最佳方法

时间:2019-04-01 08:13:53

标签: database-design

我确实有一个数据库,在一台不太快的服务器上有数百万行,而且我每周必须获取其中一些行。事实是,这是关于人的,他们与一个本地化号码相关联,但是根据分销商的不同,这个号码是不同的。

举例来说,我们有Mr.X 对于发行人A Mr.X的本地化将是"01",但是对于发行人B ,则可能是"171"

这就是我的数据库现在的样子:

Table Person : Identifiant, name, ...

Table Distributor-A : Identifiant, localisation, ...

Table Distributor-B : Identifiant, localisation, ...

有并且只会有 2个分发者,所以我考虑将每周需要的所有信息作为"name"表中的Person放在表Distributor-[]中,这样我就不必在表Person上进行内部联接,因为它确实很重,并且会降低我的查询速度。

但是我也知道在数据库的多个位置存储相同的信息通常是一个坏主意。但是我不习惯处理大量的数据,我确实需要使其更快,所以这就是为什么我需要一些建议的原因!

谢谢您的时间

1 个答案:

答案 0 :(得分:1)

嘿,加里,如果我不能正确理解您的问题,请原谅我。

所以我得到的是您有很多人,而且每个人的本地化号码对于两个发行人来说都是不同的。

假设,名为“ John Doe ”的人的个人信息存储在表中。

John与两个分销商都有关系,因此要从两个名为 Distributor_A Distributor_B 的分销商表中获取本地化编号,我们需要查询两个分销商表,这很容易怎么做?

看看这是否对您有帮助。

人员表设计

Columns
-- ---- --------- ----- --- 
Id Name Telephone Email Age Etc...
-- ---- --------- ----- ---

我们将创建一个名为“ Localisation_numbers”的新表。

本地化号码表设计

Columns
-- --------- ---- ----
Id Person_id No_a No_b
-- --------- ---- ----

我们将在表 Distributor_A Distributor_B 中以及在 Localisation_numbers 中存储本地化编号。

OR

您只能将本地化号码存储在 Localisation_numbers 表和拖放表 Distributor_A Distributor_B 中。

您可以将No_a和No_b列的默认值设置为0,这表示该人与分发者没有关系;如果该值不为0,则表示他们与分发者有关系。

要选择John Doe的本地化号码,请检查以下示例。

Persons table
-- ---- --------- ----- --- 
Id Name Telephone Email Age
-- ---- --------- ----- ---
12 John 010101010 john@ 39

Localisation_numbers table
-- --------- ---- ----
Id Person_id No_a No_b
-- --------- ---- ----
1  12        348  210

现在,我们需要在Localisation_numbers 表中搜索具有与John's Id in Persons表相同的Person_id的行,然后我们可以选择列 No_a No_b

让我知道这是否对您有帮助,以及您是否了解这一点。 谢谢。