- 程序有所改变。发帖如还有问题请报告
- 【征集】西西河的经济学,及清流措施,需要主动参与者,『稷下学宫』新认证方式,24年网站打算和努力目标
主题:【求助】实现送花功能的SQL语法求助,回复者花 -- 卷心菜
从你的Query来看,每次需要显示板块列表时,你都需要运行这个Query,对吧?同样的计算系统需要重复做多次,为什么不优化一下,例如在ibf_topics表中加字段保存首发贴的花草数,或者单独加一个表以免影响原有表结构,只有当首发贴有送花草时才重新计算,这样不更好吗? 你的Query就可以简化成
select ibf_topics.*, ibf_topics_extend.rep_inc,ibf_topics_extend.rep_dec from ibf_topics,ibf_topics_extend on ibf_topics.topic_id = ibf_topics_extend.topic_id
如果你不想做上面的修改的话,回到你现在的Query,也有可以优化的地方,那就是不要使用Left Join,这会让系统先将ibf_topics和ibf_posts中的全部记录进行外键匹配后再根据forum_id做过滤,这就是我前面帖子说的全表扫描,如果千万级甚至更多的记录数,left join对资源的消耗就会大到你不能忽视的地步,这时候我们可以用函数来代替left join,你可以在性能监视器中观察两种方法的优劣.
Sample function fn_Get_rep_inc
(
@topic_id INT,
@author_id INT,
@post_date INT
)
returns @ref_inc INT
as
begin
select @ref_inc = ibf_posts.rep_inc from ibf_posts where toic_id=@topic_id and author_id=@author_id and post_date = @post_date
return
End
这样你的Query可以改成
select ibf_topics.*, fn_Get_rep_inc(ibf_topics.topic_id,ibf_topics.starter_id, ibf_topics.starter_date), fn_Get_rep_dec(ibf_topics.topic_id,ibf_topics.starter_id, ibf_topics.starter_date) from ibf_topics WHERE ibf_topics.forum_id=".$this->forum['id']."
- 相关回复 上下关系8
🙂【求助】实现送花功能的SQL语法求助,回复者花 1 卷心菜 字2084 2008-11-03 19:16:45
🙂这种写法效率太低 2 国之小民 字252 2008-11-04 08:02:50
🙂显示时确实是直接引用 1 卷心菜 字403 2008-11-04 15:06:20
🙂重复计算就是浪费
🙂也不能说得太绝对 2 沉宝 字402 2008-11-04 18:08:05
🙂现在规模还不大 1 卷心菜 字240 2008-11-05 03:53:50
🙂具体需求决定具体方法 2 国之小民 字184 2008-11-05 05:05:13
🙂你的要求是有难度的 2 沉宝 字666 2008-11-04 07:55:09