1

我正在为车队管理系统设计数据库。

我将n每 3 秒获取一次记录数。显然,我的表中将有数百万条记录,我将在表中存储车辆的当前信息current_location。这里的性能是一个大问题。

为了解决这个问题,我收到了以下建议:

  1. 为每辆车创建一个单独的表。只要我单击创建新表,就会在运行时创建一个表。与特定表相关的所有数据都将插入并从该特定表中检索。

  2. 去分区。


请回答以下有关这些解决方案的问题。

  1. 两者有什么区别?

  2. 哪个最好,为什么?

  3. 表中的行数在什么时候会导致性能问题?

  4. 还有其他解决方案吗?

现在---如果我在 sql server 2008 中进行范围分区,我应该怎么做,

  1. 使用 varchar(20) 进行分区。

  2. 我打算根据车辆编号进行分区。例如 MH30 q 1234。这里在车辆编号中。可以说 mh30 q 1234——只有 30 和 q 会改变....所以我的问题是我应该怎么走。表示应该如何编写分区函数。

***第一个这个问题被问到我的 sql..now for sql server ********对不起,现在我从我的 sql 转移到 sql server*****有了同样的问题

4

4 回答 4

2

绝对使用分区。当mysql会为你做这件事时,为什么要费尽心思去弄清楚用哪个表来回答问题?如果您不使用分区,祝您好运找到所有卡车的当前位置!

  1. 分区为您提供多个表的性能优势,但具有自动修剪(仅选择回答查询所需的表)。

  2. 没有什么是“最好的”。问题是:什么最适合您的问题?

  3. 这是不可能回答的。您只需监控系统的性能问题并根据需要调整服务器设置或扩展。

  4. 至少就mysql而言,没有分区好!

于 2009-10-29T13:22:50.353 回答
1

不要为每天 28,800 行的分区而烦恼。

我们(还)没有每天超过 500 万。(“尚未”表示我们对他们想要的数据保留政策没有业务意见)

于 2009-11-02T09:27:18.940 回答
0

为每辆车制作一个单独的表与将车辆 ID 作为主键中的第一个字段之间应该没有什么性能差异。无论哪种方式,您都可以在磁盘上获得相同的分组,并且 mysql 在表中处理数百万行应该没有问题。

仅当您的机器上有多个磁盘并希望将负载分散到磁盘上时,分区才有用。

所以我想我的答案是两者都不做。先验地设计这个似乎有点矫枉过正。

于 2009-10-29T21:04:28.543 回答
0

我想指出的一件事是,拥有一张表(您可以稍后在需要时对其进行分区)将更容易在数据库中和查询数据方面进行维护。

于 2010-06-29T19:20:29.373 回答