数据冗余:
在设计数据库时,某一字段属于一个表,但它又同时出现在另一个或多个表,且完全等同于它在其本来所属表的意义表示,那么这个字段就是一个冗余字段。
——以上是我自己给出的定义
有两张表
文献和分类关系表:t_literature_category_relation(700w条数据) 文献和分类是n对n关系
文献表:t_literature(200w条)
业务场景:根据分类查询文献,并按照文献的发布时间排序
刚开始的做法是:先根据分类id查询出所有的文献id,然后查文献表根据文献发布时间排序
sql如下:
sql1:select literature_id from t_literature_category_relation where category_id = <分类id>;
sql2:select fields from t_literature where id in (sql1返回的文献id集合) order by publish_time limit rowStart,20;
第一条sql查出的id大约有10w左右,因为数据量大,加了索引花费的时间也要500ms,就已经不能满足响应时间小于0.5s的要求,sql2花费的时间更多,大概在2~3秒左右,响应时间就很长,用户体验会很差。
改进方案:
将文献表中的publish_time冗余到t_literature_category_relation中,在publish_time加索引
sql如下:
sql1:select literature_id from t_literature_category_relation where category_id=分类id order by publish_time limit rowStart,20;
sql2:select fields from t_literature where id in(sql1返回的20个文献id集合);
目前的时间都在100ms以内。