加载文章评论和回复以及隐藏回复,在分页的情况下怎样写才够高效?
文章评论的表结构如下
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
都是单表查询没什么问题,应该这样处理,你所说的效率无非是
mysql
的瓶颈问题,和服务端的语言没什么关系,评论的话怎么取,这要看你的业务了,这里你要注意这么几点1、当你的翻页功能只能一页一页翻,那么可以取当页的最后一条数据的id,使用
where id > last_id
这样的行级过滤条件,limit
这里只需要limit page_size
就可以了,mysql
的limit
有个问题,就是你如果写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
操作,有的可能会用sphinx
、Solr
这些全文检索引擎。你可以取研究研究