我应该结合我的MySQL表吗?

时间:2012-05-21 10:51:56

标签: mysql

我目前有一个用于GPS跟踪目的的大型数据库。每当新人开始向我发送位置时,会发生什么,我创建了一个具有唯一名称的新数据库。然后我开始向此表添加行。有高度,经度,纬度等列。

情况是这些表中的一些可能包含超过100,000个位置(行)。我现在在数据库中也有大约600个表。搜索所有这些表非常困难,它要求我运行“SHOW表”查询,然后为每个表运行查询以获取我需要的数据。

问题分解为:我应该将所有这些表组合成一个巨大的表,其中可能包含超过1,000,000行。然后,我将添加一列来分隔不同的用户。它可以使运行查询更容易,因为我现在需要一个查询而不是多个查询。

这会使系统更快还是更慢?您是否需要更多信息才能回答这个问题?

3 个答案:

答案 0 :(得分:2)

1,000,000行+使用正确的索引可能会正常工作,但由于行会不断增加,您很快就会等待查询执行。我认为这不是一个好主意。您可以做的是,创建这样的表,将所有行插入其中并尝试对其进行一些查询。您将亲眼看到它的表现如何。然后确定,生成一些随机数据并上升几百万(达到预期的大小)。如果它仍然表现良好,那么你有答案。查询速度也很大程度上取决于硬件,所以回答这些问题并不容易。尝试做一些测试。

答案 1 :(得分:0)

如果您打算定期搜索所有表,那么几乎可以肯定的是组合表并添加用户标识符列。向此表添加索引(对于您经常搜索的列)将大大提高性能。

单个查询几乎总是比不同表中的多个查询更快,特别是如果您要对结果进行排序。

答案 2 :(得分:0)

为什么没有包含location_id,海拔,经度和纬度的表格。拥有一个结合高度,经度和纬度的独特键。

使用user_id和location_id创建另一个表,可能是user_location。这里的location_id是上表的FOREIGN KEY。

由于user_id和location_id在各自的表中都是PRIMARY KEYS,这意味着它自动为INDEXED,因此它应该没有问题。

此外,位置表有时会饱和。