业务场景:

在查询我参与过的说说的时候,拉取速度会直接超时,从而导致根本拉取不出来用户参与过的说说。

查询逻辑

优化前的查询逻辑:

 如果用户发布了某条说说的二级评论、那么也代表他参与过、此时就会先查到他评论的二级评论的bid、然后通过这个bid查到他评论的一级或对二级评论的评论的bid、最后通过while循环直到查到二级评论所对应的一级评论的targetbid字段,此时的targetbid就是存的那条贴子的唯一id,然后到talk表中拿这个targetbid作为主键查询到对应的说说记录即可。

优化后的查询逻辑:

 在评论表中的创建一个masterbid字段代表这条评论对应的贴子的唯一id,然后直接拿着这个masterbid(实际上就是talk表中某条记录的主键)作为条件去talk表里面查询即可

排查过程:

优化1:

1、通过对测试数据库,使用explain语句查看我使用的查询的语句是否走的是ALL查询,发现真是的话、确定是没有走或创建索引查询的,

2、去看这个评论表有没有创建索引,发现是没有创建索引的,由于查询语句中where的条件只有一个,所以只需要对target_bid创建一个索引,就会让他走到索引。

优化2:

1、发现创建一个master_bid字段代表是这个二级评论或者一级评论对应的贴子id,前端完全可以传过来这条二级评论对应的贴子的id,后续查询的时候只需要查到这个用户是否有过评论记录即可直接从记录中的master_bid字段找到贴子唯一id

2、然后拿着这个唯一id直接去talk表里面查询即可。

表结构

bid:一级评论和二级评论的主键

master_bid:一级评论或二级评论对应的贴子的唯一id

target_bid:一级评论的对应贴子的唯一id,二级评论对应的回复的一级评论或二级评论的唯一id

user_bid:评论者的主键id