我想在我的网站中实现一些用户事件跟踪以进行统计等。
我考虑过创建一个名为 tracking_events
的表,其中包含以下字段:
| id (int, primart) |
| event_type (int) |
| user_id (int) |
| date_happened (timestamp)|
此表将包含大量行(假设至少每次页面浏览都是一个跟踪事件,并且该网站每天有1,000访问者)。
使用 event_type
字段创建此表来区分本质上不同但结构相同的行是否是一个好习惯?
或者为每种类型制作一个单独的表格会是一个更好的主意吗?例如:
表pageview_events
| id (int, primart) |
| user_id (int) |
| date_happened (timestamp)|
表share_events
| id (int, primart) |
| user_id (int) |
| date_happened (timestamp)|
5-10 table 以此类推。
(主要关注的是选择行时的性能 WHERE event_type = ...
)
谢谢。
最佳答案
这确实取决于。如果您需要将它们分开,因为您只会单独查询它们,那么将它们分成两个表应该没问题。这使您不必存储额外的鉴别器列。
但是...如果您需要一起查询这些集合,就像它们是单个表一样,那么使用鉴别器列将它们存储在一起会更容易。
就 WHERE event_type=
而言,如果只有两个不同的值,并且分布相当均匀,那么仅在该列上建立索引不会有太大帮助。如果您的大量查询将在该列上包含相等谓词,则将该列作为多列索引中的前导列可能是一种可行的方法。
显然,如果这些表将变得“很大”,那么您将希望它们针对您的查询进行适当的索引。
关于mysql - 我应该对许多分类行使用单个表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30537919/