来者有分,请大家分析如下两个简单SQL语句的效率 --情况一,条件中先将operdate转化为字符,再比较select * from tt where CONVERT(VARCHAR,operdate,23) BETWEEN '2000-08-01' AND '2009-08-25'--情况二,条件中直接比较operdateselect * from tt where operdate BETWEEN '2000-08-01' AND '2009-08-25 23:59:59.999' 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 --楼主第一句写得有点问题吧 应该这样?select * from tt where CONVERT(VARCHAR,operdate,120) BETWEEN '2000-08-01' AND '2009-08-25' 好像听说,在where后的,索引字段上用函数时,就不会用到索引 --如果operdate 是加索引的列 那么 第二条比较快 --第一条用了 convert转换索引失效 第二种执行效率高,convert 很耗时间 convert()是相当影响速度的呀。一定是第二条快。但是从程序严谨性上来说,第二种不如第一种。 第二种快,不用函数能减少很多IO开销吧。索引的问题要分聚焦和非聚焦分开看,如果是聚焦索引两个语句都会用到索引,如果是非聚焦索引因为前面是SELECT *所以第一条语句用不到索引,第二条语句能用到。如上,希望对楼主有帮助。 应该是第二,convert会影响速度。 感觉是第二种会快一点,在日期比较的时候不推荐用convert转换,直接用between 个人觉得第二个效率会高些,你自己写的强制转换,但是系统要比较两个数值最终肯定还是要隐性转换为数值来比较的,既然如此,你自己转换了一下然后系统再在后台强制转换一下最后比较;或许datetime可以更快转换为数值比较或一步到位然而你转换为字符之后,看象是字符串与字符串的比较,最终还是要转换为数值个人拙见... 谢谢各位的回复,我也测试了,确实如各位所言。总结一下:1、在operdate没有索引的情况下,两者执行效率几乎没有差别,但还是应该选用第二种情况2、在operdate有非聚集索引的情况下,第二种情况的效率明显比第一种情况高3、operdate有聚集索引的情况我没有测试结帐送分~~ 求一条sql语句 我的语句错了,帮我改改,谢谢。 sql server 查询 ····是否需要额外索引的创建?···· 求助:以动态sql语句 ——————》###########UPDATE语句##########〈———————— 请教:有关联合索引顺序的问题?如何创建索引顺序 sql sever 连接问题,死活连不上啊~ 菜鸟学飞----一个关于查询的问题 SQL多表查询并生成一个新表来查看 这两条sql有区别吗 菜鸟问一个count的问题
select * from tt where CONVERT(VARCHAR,operdate,120) BETWEEN '2000-08-01' AND '2009-08-25'
--第一条用了 convert转换索引失效
一定是第二条快。但是从程序严谨性上来说,第二种不如第一种。
索引的问题要分聚焦和非聚焦分开看,如果是聚焦索引两个语句都会用到索引,如果是非聚焦索引因为前面是SELECT *所以第一条语句用不到索引,第二条语句能用到。
如上,希望对楼主有帮助。
但是系统要比较两个数值最终肯定还是要隐性转换
为数值来比较的,既然如此,你自己转换了一下
然后系统再在后台强制转换一下最后比较;
或许datetime可以更快转换为数值比较或一步到位
然而你转换为字符之后,看象是字符串与字符串的比较,最终还是要转换为数值
个人拙见...
1、在operdate没有索引的情况下,两者执行效率几乎没有差别,但还是应该选用第二种情况
2、在operdate有非聚集索引的情况下,第二种情况的效率明显比第一种情况高
3、operdate有聚集索引的情况我没有测试结帐送分~~