c语言sscanf函数的用法是什么
335
2022-09-14
指定索引
近来发现,SELECT * FROM ... 与 SELECT COUNT(*) FROM ...性能居然很不一样。在我的测试用例中,前者比后者快好多。
按照不假思索的理解,应该是SELECT COUNT(*)要快才对啊,只看多少条就行了;就算比SELECT * FROM 慢,也应该是慢一点点,数一下返回来的记录数不就行啦?对计算机来说,应该是轻而易举的事情。
可是偏不。
查看实际执行计划,发现两种语句的执行路径根本不一样。(不过其中的执行步骤,我也看不懂)
用到的索引居然也不同。
测试用例中,我这个表有这么两个索引,一个聚集,一个非聚集,都用到某一个列。在SELECT *中,优化器用的是聚集索引,而SELECT COUNT(*)中,用的却是那个非聚集索引。那个非聚集索引,是个复合索引,有两个字段,身躯庞大,看上去傻傻的,你用它,不慢才怪。但是优化器为什么这么喜欢用它,自动挑中它,真是天晓得了。
幸亏世界上还有在SQL语句中指定索引这么一说:
SELECT COUNT(*) FROM Table1 WITH(INDEX(索引名))
指定我钟意的聚集索引,结果果然快多了。
对比如下:
SELECT COUNT(*)
未指定索引前,最快21秒,最慢30秒
指定索引,6秒
SELECT *,2秒
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~