我必须创建2个表:
杂志(这些列有1000万行:id,标题,流派,印刷,价格)
作者(包含以下列的1.8亿行:id,name,magazine_id)
.
每个作者都只能写一本杂志,每本杂志都有更多的作者.
所以,如果我想了解Motors Magazine的所有作者,我必须使用这个查询:
SELECT * FROM Author,Magazine WHERE ( Author.magazine_id = Magazine.id ) AND ( genres = 'Motors' )
这同样适用于“打印和价格”列.
为了避免与数百万行的表连接,我想使用这个表:
杂志(这一栏有1000万行:id,title,价格)
作者(此列有1.8亿行:id,magazine_id,打印,价格)
.
而这个查询:
SELECT * FROM Author WHERE genres = 'Motors'
这是一个好方法吗?
我想让它跑得更快
解决方法
不,我不认为如您所描述的那样复制信息对于关系数据库来说是一个很好的设计.
如果您更改给定杂志的类型或价格,则必须记住在重复信息的所有作者行中更改它.如果您有时忘记,最终会导致数据异常.你怎么知道哪一个是正确的?
这是relational database normalization的一个优点,用于表示冗余最少的信息,因此您不会出现异常.
为了让它跑得更快,我想你要做的是什么,你应该学习how to use indexes,特别是covering indexes.