我应该对许多分类行使用单个 table 吗?

Should I use a single table for many categorized rows?

我想在我的网站上实现一些用户事件跟踪以进行统计等。 我考虑创建一个名为 tracking_events 的 table,它将包含以下字段:

| id (int, primart) |
| event_type (int) |
| user_id (int) |
| date_happened (timestamp)|

此 table 将包含大量行(假设至少 每个页面视图 是一个跟踪事件并且有 1,000 该网站的每日访问者)。

使用 event_type 字段创建此 table 以区分本质上不同但结构相同的行是否是一个好习惯?

或者为每种类型制作一个单独的table会更好吗?例如:

table pageview_events

| id (int, primart) |
| user_id (int) |
| date_happened (timestamp)|

table share_events

| id (int, primart) |
| user_id (int) |
| date_happened (timestamp)|

等5-10 table秒。

(主要关注的是选择行时的性能WHERE event_type = ...

谢谢。

这真的取决于。如果您需要将它们分开,因为您只会单独查询它们,那么将它们分成两个 table 应该没问题。这使您不必存储额外的鉴别器列。

但是...如果您需要一起查询这些集合,就好像它们是一个 table,将它们存储在一起会容易得多,使用鉴别器列。

至于 WHERE event_type=,如果只有两个不同的值,并且分布非常均匀,那么仅针对该列的索引不会有太大帮助。将该列作为 leading 列包含在多列索引中可能是可行的方法,如果您的大量查询将在该列上包含相等谓词。

显然,如果这些 table 将成为 "large",那么您将希望为您的查询适当地索引它们。