Foxtable(狐表)用户栏目专家坐堂 → 請教SQL條件比較問題


  共有3600人关注过本帖树形打印复制链接

主题:請教SQL條件比較問題

帅哥哟,离线,有人找我吗?
don
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1812 积分:12999 威望:0 精华:14 注册:2008/10/11 18:07:00
請教SQL條件比較問題  发帖心情 Post By:2014/6/4 15:34:00 [只看该作者]

請教下面三種,哪種高效些?多謝!

A.Select * From {订单} Where  日期 BETWEEN #5/1/2014# AND #5/31/2014#
B.Select * From {订单} Where Year(日期) = 2014 And  Month(日期) = 5
C.Select * From {订单} Where Format(日期,'yyyyMM') = '201405'


 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/6/4 15:36:00 [只看该作者]

这恐怕要用大量数据实际测试一下了, 坐等结果.

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/6/4 15:45:00 [只看该作者]

 不知道,个人感觉最原始的最快。数据库对语法的优化也应该是这样做的。

 回到顶部
帅哥哟,离线,有人找我吗?
jspta
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1732 积分:11266 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2014/6/4 16:48:00 [只看该作者]


MSSQL2005,测试表格20W行数据,查询数据3373行,

A.Select * From {订单} Where  日期 BETWEEN #5/1/2014# AND #5/31/2014#
SQL Server 分析和编译时间: 
   CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

(3373 行受影响)

SQL Server 执行时间:
   CPU 时间 = 31 毫秒,占用时间 = 328 毫秒。


B.Select * From {订单} Where Year(日期) = 2014 And  Month(日期) = 5
SQL Server 分析和编译时间: 
   CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

SQL Server 执行时间:
   CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

(3373 行受影响)

SQL Server 执行时间:
   CPU 时间 = 62 毫秒,占用时间 = 325 毫秒。

C.Select * From {订单} Where Format(日期,'yyyyMM') = '201405'

不支持



增加月份数量,没有太多时间差别,误差不高于0.1s,反而当跨月份甚至年度的时候,方案1书写更加简洁


 回到顶部
帅哥哟,离线,有人找我吗?
don
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1812 积分:12999 威望:0 精华:14 注册:2008/10/11 18:07:00
  发帖心情 Post By:2014/6/4 17:16:00 [只看该作者]

多謝兩位版主!不知以下兩種是否這樣?

B.  Select * From {订单} Where Year(日期) = 2014 And  Month(日期) = 5      
等於:Select * From (Select * ,Year(日期) As  年, Month(日期) As 月 From {订单})  Where 年= 2014 And 月 = 5 

C.   Select * From {订单} Where Format(日期,'yyyyMM') = '201405'
等於:Select * From (Select * , Format(日期,'yyyyMM')  As   年月 From {订单})  Where 年月 =  '201405'

 回到顶部