在运行 Sql 表最大日期逻辑时需要帮助
Posted
技术标签:
【中文标题】在运行 Sql 表最大日期逻辑时需要帮助【英文标题】:Need help in tunning Sql table max date logic 【发布时间】:2017-04-25 09:13:12 【问题描述】:我们有一个如下所述的场景,需要输入以获得最佳逻辑。 数据库是sql server 2012。
我有一个表 abc,其中包含列 'a' 、 'b' 、 'c' 和日期字段 'd'。 如果表 abc 有 10 条不同日期的记录,这是最好的优化方式 有列 'a' , 'b' , 'c' 和 'd' 其中“d”只是整个记录集的最大日期。
例如如果下面是表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 个连接,并且表中的数据非常庞大。
请提出建议。
【问题讨论】:
如果你不确定你给定的数据,我认为很难给你一个解决方案.. 【参考方案1】:您的两个解决方案都访问表两次..由于您使用的是 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)
【讨论】:
@TheGameiswar你能解释一下覆盖索引将如何执行 对于这个窗口函数,索引的格式应该是POC
,这意味着分区和按列排序应该是关键列,其余应该包括【参考方案2】:
如果您希望优化插入,您可以在 SELECT 查询中简单地使用 MAX 函数。 如果您希望优化选择, 您可以使用计算列(这会降低 INSERT/UPDATE 性能)。
https://technet.microsoft.com/en-us/library/ms191250(v=sql.105).aspx
【讨论】:
【参考方案3】:declare @MaxDate datetime
Select @MaxDate=max(d) from table1
select a,b,c @MaxDate d from table1
【讨论】:
虽然欢迎使用此代码 sn-p,并且可能会提供一些帮助,但它会是 greatly improved if it included an explanation of 如何解决这个问题。没有这个,你的回答就没有多少教育价值了——记住你是在为未来的读者回答这个问题,而不仅仅是现在提问的人!请edit您的答案添加解释,并说明适用的限制和假设。以上是关于在运行 Sql 表最大日期逻辑时需要帮助的主要内容,如果未能解决你的问题,请参考以下文章