以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 請教SQL條件比較問題 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=51854) |
-- 作者:don -- 发布时间:2014/6/4 15:34:00 -- 請教SQL條件比較問題 請教下面三種,哪種高效些?多謝! 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 -- 发布时间:2014/6/4 15:36:00 -- 这恐怕要用大量数据实际测试一下了, 坐等结果. |
-- 作者:有点甜 -- 发布时间:2014/6/4 15:45:00 -- 不知道,个人感觉最原始的最快。数据库对语法的优化也应该是这样做的。 |
-- 作者:jspta -- 发布时间: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 -- 发布时间: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\'
|