MYsql数据冗余

在面临大量数据查询时,由于分类查询文献并按发布时间排序导致响应时间过长,通过将文献表中的`publish_time`冗余到关系表并加索引,优化SQL查询,成功将响应时间降低至100ms以内,显著提升了查询效率和用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据冗余:

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值