当前位置: 网学 > 编程文档 > SQL SERVER > 正文

难道SQL的子查询就是鸡肋吗?

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/19
下载{$ArticleTitle}原创论文样式
返回还是第一次看到,因为没有条件限制,本例不应用子查询,应直接用Join。必要时应引入“冗余字段”
是差不多的,但都有一个问题:

如果是join的话,那么在有统计函数count()的时候,不是还要进行分组吗?
如果查询的字段比较多, 那么group by 的字段就会特别多,这样在性能上也不会太好吧。

和它的理由是一样的。

#16楼 [楼主] 2008-05-13 14:49 姜敏 

@ PerfectDesign
@姜敏
指的是你居然用interbase
哈哈,没办法,我也不想,但是现在小项目没办法。

#17楼  2008-05-13 15:57 假正经哥哥 

@姜敏
实践是检验真理的唯一标准,如果字段多group by 效率不好而用子查询
那么 子查询做为字段来做的效率永远是最低的。

如果你要考虑group by的效率,那么你就该在适当的字段上建立,或者几个字段分开group 的方式 (嵌套)




#18楼 [楼主] 2008-05-13 16:36 姜敏 

@ 假正经哥哥
子查询做为字段来做的效率永远是最低的
这句话有什么根据吗?
其实我想知道就是子查询做为字段和我用的第二种方法:循环进数据库取数据,这两方法在执行效率上的区别.

#19楼  2008-05-13 17:06 金色海洋(jyk) 

要是我来实现这个功能的话,我会在 电影表里加至少两个和集数相关的字段。

电影表
电影一共有多少集
已经上传了多少集
其它字段

可能“电影一共有多少集”的字段已经有了,“已经上传了多少集”的字段好像没有,而是通过另一个表,动态count 出来的。

我会在每次变动的时候(比如上传了一集新的),来修改 “已经上传了多少集”的字段,这样,现实的时候就会很快了。

没有太细看,可能理解的不正确,仅供参考。

#20楼 [楼主] 2008-05-13 17:29 姜敏 

@ 金色海洋(jyk)
非常谢谢您的解决方案,非常有效,但是您能不能给在下说下这个问题呢?
其实我想知道就是子查询做为字段和我用的第二种方法:循环进数据库取数据,这两方法在执行效率上的区别.

#21楼  2008-05-13 18:02 PerfectDesign 

@金色海洋(jyk)
你这个想法就是索引视图的想法
而且不需要你手动维护聚合字段

#22楼  2008-05-13 21:41 金色海洋(jyk) 

说实在的,你写的sql语句我都没有看懂,所以区别就不好说了。

count的效率是很慢的,他必须去“数数”,基本没有什么可以优化的方法,所以要尽量地少用,及使用的话,也要在where 条件里的字段做好索引。

再有就是看 到底做了多少次count 。可能第一种方法是对电影表里的所有记录都做了一遍count ,而第二种只做了11次count 。

#23楼 [楼主] 2008-05-14 09:24 姜敏 

@ 金色海洋(jyk)

1:说实在的,你写的sql语句我都没有看懂,所以区别就不好说了。

2:count的效率是很慢的,他必须去“数数”,基本没有什么可以优化的方法,所以要尽量地少用,及使用的话,也要在where 条件里的字段做好索引。

3:再有就是看 到底做了多少次count 。可能第一种方法是对电影表里的所有记录都做了一遍count ,而第二种只做了11次count 。

现在本人针对您的观点提出点问题:

1:抱歉,写的不太好,现在修改了下应该可以看明白了.

2:count的效率是很慢的,他必须去“数数”,基本没有什么可以优化的方法,所以要尽量地少用
尽量少用是什么概念,有的地方是一定要用的,您是否有更好的计算总数的方法呢?

3:可能第一种方法是对电影表里的所有记录都做了一遍count ,而第二种只做了11次count 。
我第一种方法里面有子查询,所有外层循环一次就要count一次,所有它总共count了10次,第二种方法也是count10次,他们唯一的区别就是第一种方法只连接数据库1次,页第二种方法连接数据库10次而已.

本人的这两种方法理论上应该是第一种连

  • 下一篇资讯: 主键的故事
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号