MYsql数据冗余

数据冗余:

在设计数据库时,某一字段属于一个表,但它又同时出现在另一个或多个表,且完全等同于它在其本来所属表的意义表示,那么这个字段就是一个冗余字段。

——以上是我自己给出的定义

有两张表 
文献和分类关系表: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以内。

你可能感兴趣的:(mysql)