加载文章评论和回复以及隐藏回复,在分页的情况下怎样写才够高效?

发布于 2022-09-06 15:09:32 字数 568 浏览 23 评论 0

文章评论的表结构如下

CREATE TABLE `comment` (
  `id` varchar(64) NOT NULL,
  `parent_id` varchar(64) NOT NULL,
  `user_id` varchar(64) NOT NULL,
  `essay_id` varchar(64) NOT NULL,
  `content` longtext NOT NULL,
  `publish_date` datetime NOT NULL,
  `del_flag` tinyint(1) DEFAULT '0',
  `fail_remarks` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
)

就像贴吧那样,每层楼都有回复,回复有预览的三个,以及剩余回复的数量提示
因为可以回复评论,回复也可以回复,所以用想查询出树形结构
然后评论的回复有预览的三个,多余的隐藏,想贴吧那样
评论还有分页功能
我想的是先把评论id查出来并limit一下,再用评论的id去查子项,但是想想效率好像太低了。。
如何写sql的效率才高呢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

月野兔 2022-09-13 15:09:33

都是单表查询没什么问题,应该这样处理,你所说的效率无非是mysql的瓶颈问题,和服务端的语言没什么关系,评论的话怎么取,这要看你的业务了,这里你要注意这么几点
1、当你的翻页功能只能一页一页翻,那么可以取当页的最后一条数据的id,使用where id > last_id 这样的行级过滤条件,limit这里只需要 limit page_size就可以了,mysqllimit 有个问题,就是你如果写limit 100000 10 它会把这100000 条数据都检索一遍。这样写的好处就是你设置了一个过滤条件,那么他其实只会检索你设置的page_size 的数据条数,其次是你可以写多个条件。
2、如果你是单条件查询,那么可以使用子查询,就是在where 行级过滤条件里使用 子查询,比如说 select * from table1 where id > (select id from table1 limit current_num, page_size) limit page_size,这里子查询走的主键索引,所以说速度是很快的。
3、当涉及单条件和多条件查询的时候,组合索引非常重要,比如 select id from table1 where age > 18, 这里索引会先走where 条件 再走 id,所以按照组合索引的最左原则,你懂得。
4、之后用 In() 取另一张表的数据即可,其实也就查询两次数据库,剩下的交给服务端处理一下就完事了。
5、能设置定长的字段可以尽量设置为定长。

还要说一点的是,其实当数据量真的很大的时候,其实会用分表,索引表,分段查询这些东西来做select 操作,有的可能会用sphinxSolr 这些全文检索引擎。你可以取研究研究

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文