我使用的是火鸟2.1和我在寻找更好的方式来解决这个问题。

我正在写一个日历的申请。不同用户的日历条目都存储在一个大的日历表。每个日历条目,可以有一个提醒置只有一个提醒/入境。

据统计,该日历表中可能增长到成千上万的记录上的时间,同时还要少得多的提醒。

我需要查询的提示一个恒定的基础上。

这是最好的选择吗?

A)存储的提醒'信息,在该日历表(在这种情况下,我要查询的成千上万的记录IsReminder=1)

B)创建一个单独表提醒其中只包含的ID日历条目,它们提醒集的,然后查询的两个表格有一个参加工作(或者创建一个图在他们身上)

C)我可以存储所有信息提醒提醒表中,然后仅查询该表。不利的一面是,一些信息需要重复在两个表格中,如为了显示的提醒,我需要知道的及储存的事件的开始时间在提醒表,因此我维持两个表有相同的价值观。

你怎么想?

还有一个问题:该日历表将包含砑的多个用户,分离只有通过一个用户名的领域。因为有可能只有4-5用户,甚至如果我把一个指数在这个领域,其选择性将是非常糟糕-这是不是好一桌有成千上万的记录。是否有一个解决办法在这里?

谢谢!

有帮助吗?

解决方案

有优点和缺点所有三个选择。 WHIS一个是最好的取决于你有没有提供细节。在一般情况下,不要过分担心选择三个或四个条目出十万的,前提是你已经建立了索引允许正确的检索策略。如有不明白的索引,你可能会遇到麻烦,无论你做这三个选项的。

如果是我的话,我会选择B.去我还保存提醒的任何属性表中的提醒。

要非常小心,你是否通过EVENTID单独或通过识别一事件(用户ID,事件ID)。如果选择后者,则您有义务使用的事件表中的复合主键。不要过分担心复合主键,尤其是与火鸟。结果 如果你声明一个复合主键,要知道,声明(用户ID,事件ID)将不会有相同的后果声明(事件ID,用户ID)。它们在逻辑上等价的,但自动生成的索引的结构将在两种情况下不同。

这反过来会影响查询,如“找到一个给定用户的所有提醒”的速度。

此外,如果是我的话,我会避免选择C.引进有害的冗余性的模式与它携带,当你去更新数据了一些精心设计的编程责任。否则,你可以用一个数据库最终,存储矛盾版本的数据库中的不同地方同样的事实。

而且,如果你真的想知道perfromance的影响,尝试所有三种方式,负载测试数据,并做你自己的基准。

其他提示

我想你需要创建逼真,假的用户数据,并衡量你希望运行一些典型的查询的区别。

索引,查询优化,以及各种你需要可以有很大的不同的查询结果的, 所以它就不好说什么是最好的不知道了。

当时选择选项(A)你应该

  • 提供索引"IsReminder"(或一组合的指数在IsReminder,UserId,什么最适合你的旨在查询)
  • 请确保您的查询使用这一索引

备选案文B是优选的过如果你有多布尔国旗的每个提醒储存(例如,数分钟的用户应当通知之前的事件)。你应该的,但是,作出一些猜测,如何经常在你的节目你将要加入两个表格中。

如果可以的话,避免选择C如果你不想要基准所有三种情况下,我提议开始与一个或B,根据所描述的情况,和可能的解决方案,你选择将足够快,使你不必理会与其他情况。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top