mysql - 我应该对许多分类行使用单个表吗?

标签 mysql sql database database-design

我想在我的网站中实现一些用户事件跟踪以进行统计等。 我考虑过创建一个名为 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/

相关文章:

java - 如何使用sql2o从SQL中获取数据?

php - MySQL 错误 "Expression #1 of ORDER BY clause is not in GROUP BY clause"

从两个表中选择 PHP

c# - 仅在ASP.NET MVC页面上显示从数据库进行数据相减操作的结果

mysql - 更新一个字段以增加直到另一个字段改变

mysql - SQL Server 如何创建带空格的列名

php - Preg_match 差异?

c# - 如何为 SQL CLR 存储过程提供 sql_variant 参数?

mysql - 数据库和 Hibernate 一对一的最佳方法

database - MVC3 数据上下文最佳实践