我有一个包含两个要查询的表的MySQL数据库:
用户:存储有关用户的信息,例如userID等。
地图:包含约700万个mapID(一个索引,指的是地球上的纬度/经度)的地图表。
这些地图ID中有许多与用户ID相关联,因此例如用户#1可能有10个与他相关联的mapID,用户#2可能有100个等等。
我想知道在使用用户ID查询数据库时,有什么更有效/更安全/最佳的做法来计算属于用户的mapID数:
1)查询Map表以计算有多少mapID属于该userID,或者
2)将属于用户的mapID数量存储在Users表的另一列中(例如mapCount),并且仅查询该值(而不是每次都搜索大型Maps表)。
我知道选项2会更快,但是我担心同步等潜在的问题。例如,每次用户执行某项操作(例如,向他的帐户添加一个mapID)时,我都会将该userID添加到地图上的关联mapID表,并增加“用户”中的mapCount值,以便后续搜索/操作将更快。但是,如果第二个查询由于某种原因而失败并且mapCount字段不同步怎么办?这值得冒险吗?
在这种情况下,通常最好的方法是什么?
最佳答案
如果要构建数据库,请先使用查询从查询中提取所需的数据。您可以通过在map(usersId)
上添加索引来优化此查询。如果性能足够,那么您就完成了。
如果性能不足,则可以考虑单独存储计数。要保持计数,需要在insert
和delete
以及可能在update
上触发。
这些触发器将在添加和修改数据时影响性能。这通常很小,但可能很重要。如果要进行批量加载操作,则需要手动处理汇总值。
所有这些维护工作量很大,只有在确实需要这样做的情况下,才应该走这条路。