我正在创建一个包含两个主要表的数据库:items
,locations
。
items
表包含约3,500条记录,并以每月1百万条记录的速度上升。
locations
表格包含50,000个地点(名称,纬度,经度),且尺寸不会发生变化。
对items
表的每次阅读都需要JOIN
到locations
表,以找出项目所在的位置,除非我复制了位置内容对于每个项目记录。我预计每个月会对物品表进行大约5,500次查询。
搜索数据库将由Sphinx执行,所以我不需要担心复杂的mysql地理坐标查询。
我的问题是,我最好是复制每个项目的位置数据,还是执行JOIN语句?
提前致谢
答案 0 :(得分:2)
我认为如果JOIN
和ITEM
之间的LOCATIONS
与ITEM
表中的外键相关,那会更好。
如果您为每个tiem复制数据,将会有太多的数据冗余
答案 1 :(得分:0)
我们可以从学术角度讨论非正规化,但实践总是与理论不同。你如何设计你的结构也应该取决于使用 - 对你来说,我猜它是响应的时间。
加入50k表并不是非常昂贵,并且不会花费太多时间,因为location
大小没有上升
如果你有足够的可用空间,非规范化将始终改善你的查询,但不必要地复制50.000条记录,另一方面你将失去你正在寻找的速度。