我们有一个如下所述的场景,需要输入以获得最佳逻辑。 数据库是sql server 2012。
我有一个表格abc,其中包含列' a' ,' b' ,' c'和日期字段' d。 如果表abc有10个具有不同日期的记录,这是最佳的优化方式 有列' a' ,' b' ,' c'以及' d' 在哪里' d'只是整个记录集的最大日期。
e.g。如果下面是表abc数据,
a b c d
a1 b1 c1 01-02-2017
a2 b2 c2 02-02-2017
a3 b3 c3 10-02-2017
a4 b4 c4 04-02-2017
what we need is,
a b c d
a1 b1 c1 10-02-2017
a2 b2 c2 10-02-2017
a3 b3 c3 10-02-2017
a4 b4 c4 10-02-2017
这里我们需要在所有记录中复制最大日期。
到目前为止我们尝试过的事情。
选项1. Select a , b, c, (Select max(d) from abc) d from abc
选项2.
Select a , b, c, max.max_D from abc
join (Select max(d) max_D from abc) max on 1=1
注意:这只是例如我们的实际要求是相同的,但我们有超过10个连接,表中的数据是巨大的。
请建议。
答案 0 :(得分:0)
你的两个解决方案访问表两次..由于你使用的是2012,我建议使用windows函数来处理这个
Select a , b, c,
max(d)over (order by d desc) as maxx
from abc
要使此查询以最佳方式执行,您需要以下索引
create index nci on table(d)
include(a,b,c)
答案 1 :(得分:0)
如果您希望优化插入,您可以在SELECT查询中使用MAX功能
如果您希望优化选择,
您可以使用计算列(这将降低INSERT / UPDATE性能)。
https://technet.microsoft.com/en-us/library/ms191250(v=sql.105).aspx
答案 2 :(得分:0)
declare @MaxDate datetime
Select @MaxDate=max(d) from table1
select a,b,c @MaxDate d from table1