我应该对许多分类行使用单个 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",那么您将希望为您的查询适当地索引它们。
我想在我的网站上实现一些用户事件跟踪以进行统计等。
我考虑创建一个名为 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",那么您将希望为您的查询适当地索引它们。