工作查询优化 (SQL Server 2005)
Posted
技术标签:
【中文标题】工作查询优化 (SQL Server 2005)【英文标题】:Working Query Optimization (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)
用更好的东西代替?我搜索了但找不到一个,所以请指导我。
【问题讨论】:
***.com/questions/113045/… 但是我怀疑对那个 Order_Expiry_DateTime 字段执行额外的操作可以称为“优化” 在 SQL Server 2008 和更高版本中,您可以轻松地使用CAST(orderDate AS DATE)
来获取仅日期部分 - 但对于 2005 我没有不认为你可以对这个表达做很多事情......
@Sohail 我认为这种方式已经足够好了,但是性能会更多地影响其他方面,例如 where 子句或加入方式等
您的计算在大约 10 行上被调用。无论您做什么,都很难衡量任何差异。这是查询执行成本的
【参考方案1】:
确保 OrderId 已编入索引,然后确保在添加时不会对该表进行插入和更新。
【讨论】:
以上是关于工作查询优化 (SQL Server 2005)的主要内容,如果未能解决你的问题,请参考以下文章