【问题标题】:Working Query Optimization (SQL Server 2005)工作查询优化 (SQL Server 2005)
【发布时间】:2013-12-25 06:21:35
【问题描述】:

我有一张表Orders,我正在从客户/用户那里获得订单日期规范,如到期日等,但我不需要订单到期时间。以下查询与日期时间类似:

SELECT 
    orderDate as Order_DateTime,  
    convert(varchar(10),orderDate,120) as Order_Date,
    DATEADD(dd,2,orderDate) as Order_Expiry_DateTime,
FROM 
    [Orders]
WHERE 
    orderId = 55;

结果是:

Order_DateTime          |  Order_Date   | Order_Expiry_DateTime   
2013-12-19 21:54:00.000 | 2013-12-19    | 2013-12-21 21:54:00.000 
2013-12-19 19:21:00.000 | 2013-12-19    | 2013-12-21 19:21:00.000 
2013-12-19 19:29:00.000 | 2013-12-19    | 2013-12-21 19:29:00.000 
2013-12-24 22:10:00.000 | 2013-12-24    | 2013-12-26 22:10:00.000 
2013-12-25 18:00:00.000 | 2013-12-25    | 2013-12-27 18:00:00.000 
2013-12-24 23:11:00.000 | 2013-12-24    | 2013-12-26 23:11:00.000 
2013-12-24 20:37:00.000 | 2013-12-24    | 2013-12-26 20:37:00.000 

现在在下面的查询中,我从Order_Expiry_DateTime 中删除了时间部分。

结果符合我的要求,但我可以在某种程度上优化这个查询吗?

SELECT 
    orderDate as Order_DateTime,  
    convert(varchar(10), orderDate, 120) as Order_Date,  
    convert(varchar(10), (DATEADD(dd, 2, orderDate)), 120) as Order_Expiry_Date   
FROM 
    [Orders]   
WHERE 
    orderId = 55;

结果很好,如:

Order_DateTime          |  Order_Date   | Order_Expiry_Date
2013-12-19 21:54:00.000 | 2013-12-19    |   2013-12-21 
2013-12-24 22:10:00.000 | 2013-12-24    |   2013-12-26 
2013-12-25 18:00:00.000 | 2013-12-25    |   2013-12-27 
2013-12-24 23:11:00.000 | 2013-12-24    |   2013-12-26 
2013-12-24 20:37:00.000 | 2013-12-24    |   2013-12-26 

可以

convert(varchar(10), (DATEADD(dd, 2, orderDate)), 120)

用更好的东西代替?我搜索了但找不到一个,所以请指导我。

【问题讨论】:

  • 但是我怀疑对那个 Order_Expiry_DateTime 字段执行额外的操作可以称为“优化”
  • 在 SQL Server 2008 和更高版本中,您可以轻松地使用 CAST(orderDate AS DATE) 来获取仅日期部分 - 但对于 2005 我没有不认为你可以对这个表达做很多事情......
  • @Sohail 我认为这种方式已经足够好了,但是性能会更多地影响其他方面,例如 where 子句或加入方式等
  • 您的计算在大约 10 行上被调用。无论您做什么,都很难衡量任何差异。这是查询执行成本的

标签: sql sql-server-2005 query-optimization


【解决方案1】:

确保 OrderId 已编入索引,然后确保在添加时不会对该表进行插入和更新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多