绝对晕的一个问题,基本上我已经彻底晕倒了。(100分)

  • 主题发起人 主题发起人 soul
  • 开始时间 开始时间
S

soul

Unregistered / Unconfirmed
GUEST, unregistred user!
select count(*) from letters
where id in( SELECT DISTINCT Parent FROM letters WHERE (Parent <> 0) AND (UserFrom = 'yysun' ) ) and parent=0 and Status < 2
select * from letters
where id in( SELECT DISTINCT Parent FROM letters WHERE (Parent <> 0) AND (UserFrom = 'yysun' ) ) and parent=0 and Status < 2
近来又发现一个问题,我观察一个sql的执行效率。
结果发觉第二句sql反而快,不是快一点点,而是20倍,晕的我不知道怎么办好了。
 
因此我现在停工,休息,打《帝国》。
 
呵呵,站长大人有问题了。
只有拿查询分析器看看是哪部分占用了时间了。
 
[:D],我们联机打《帝国》吧,哈哈!
 
>>不是快一点点,而是20倍
20倍???count就这么....
 
这是事实,平时我门么看到Count快是因为数据量小,返回速度快
并不是查寻速度快,没有任何条件的查寻是最快的select * from table
如果这个表没有索引就更快了
 
我只会用,SQL原理一桥不通!听课!
Count(*),具体在SQL里面是怎么执行的呀,是不是也要遍历一次呀!要是这样当然就慢了!
 
啊,没试过,我也一直以为count()快啊,看来count还在一个一个加吧
 
delphi对有些SQL的空格处理有问题
如我遇到过的 一名SQL中某个位置 打2个空格要20秒,1个或n个空格不到一秒
不知是怎么会事
 
SQL里面值得研究 [:D]
 
count(*)是全表扫描吧,知道的回答一下
 
你看的只是执行效率而已!*不用做任何计算,count(*)可是要计算的。
 
我也觉得可能在大数据量的时候,(COUNT)这玩意是慢,举个例,
35万条记录.(不算大)
在企业管理器中OPEN TABLE,很快,
然后右键菜单,最后一条,竟然一直在计数,花了我25秒.可能是机器慢,感觉这样的命令
应该不废时间的.
 
问题是第二句取回了全部数据,在查询分析器中显示完整了,
如果不用count(*)用@@ROWCOUNT则飞快啊,我不晕行吗?按道理,count才不需要读数据库才对啊。
 
>>soul
如果是用唯一性关键字呢?
比如用Count(ID_Table),好像比用count(*)要快,以前好像碰到过!不过不知道为什么:(
 
一点不奇怪.而且非常正常
从count本身来说, 两者是有别, 但没这么大, 而且可以肯定的是Select * From 比Select Count(*) From
要慢, 因为你的数据在后台计算出了结果集返送到前台有时间你要计入.
只所以出现此情况. 是因为
你运行的先后次序问题.
sqlserver在接收到请求后,从物理页将数据读入内存,再在内存作处理,将计算出的结果集返
送,但数据返送后,sqlserver不会立时清除掉,如果你经常检查server的内存就会发现你的server使用一段
时间后,sqlserver的内存比原来会大许多(除非你作了限定).
而对于上面情况,select count(*) 是将数据读入内存再计算, select * 是将内存中的东东直接
返给你。所以不同.
另外对于count(*),与 select *.的处理.你可以查一下服务器响应时间.
 
而对于Count的使用.其实Count(*)未必比Count(Column)慢.而且很多时候会快. 原因:
Count(*)是读索引页的内容(如果有建索引的话). 而Count(Column)中如果Column不是索引列的话,
就要通过读数据页的内容来计算的.
至于@@ROWCOUNT,服务器差不多不用做事当然快了.
 
to kuw12:
Open Table的处理不同, 不是一次取出所有数据到前台的
 
你下次重启动机器再对调试一下,我怀疑是缓冲的原因
 
后退
顶部