下面的简单查询需要很长时间(几分钟)来执行。
我有一个索引:
create index IX on [fctWMAUA] (SourceSystemKey, AsAtDateKey)
SELECT MAX([t0].[AsAtDateKey]) AS [Date], [t0].[SourceSystemKey] AS [SourceSystem]
FROM [fctWMAUA] (NOLOCK) AS [t0]
WHERE SourceSystemKey in (1,2,3,4,5,6,7,8,9)
GROUP BY [t0].[SourceSystemKey]
统计信息如下:
采取完全相同的查询并将其重新格式化为以下格式,可以得到以下统计信息:
执行需要31毫秒。
SELECT MAX([t0].[AsAtDateKey]) AS [Date], [t0].[SourceSystemKey] AS [SourceSystem]
FROM [fctWMAUA] (NOLOCK) AS [t0]
WHERE SourceSystemKey = 1
GROUP BY [t0].[SourceSystemKey]
UNION
SELECT MAX([t0].[AsAtDateKey]) AS [Date], [t0].[SourceSystemKey] AS [SourceSystem]
FROM [fctWMAUA] (NOLOCK) AS [t0]
WHERE SourceSystemKey = 2
GROUP BY [t0].[SourceSystemKey]
UNION
SELECT MAX([t0].[AsAtDateKey]) AS [Date], [t0].[SourceSystemKey] AS [SourceSystem]
FROM [fctWMAUA] (NOLOCK) AS [t0]
WHERE SourceSystemKey = 3
GROUP BY [t0].[SourceSystemKey]
/* AND SO ON TO 9 */
我如何快速建立索引以进行分组?
尝试告诉SQL Server使用索引:
...
FROM [fctWMAUA] (NOLOCK, INDEX(IX)) AS [t0]
...
确保该表的统计信息是最新的:
UPDATE STATISTICS [fctWMAUA]
为了获得更好的答案,请同时打开两个查询的显示计划:
SET SHOWPLAN_TEXT ON
并将结果添加到您的问题中。
您也可以在没有GROUP BY的情况下编写查询。例如,您可以使用排他的LEFT JOIN排除具有较早日期的行:
select cur.SourceSystemKey, cur.date
from fctWMAUA cur
left join fctWMAUA next
on next.SourceSystemKey = next.SourceSystemKey
and next.date > cur.date
where next.SourceSystemKey is null
and cur.SourceSystemKey in (1,2,3,4,5,6,7,8,9)
这可能出乎意料的快,但是我认为它不能击败UNION。
我对kotlin中的收藏感到困惑。 结构有点复杂。 现在我想得到一张地图,<code>地图 我被困在这里
本文向大家介绍SQLSERVER中忽略索引提示,包括了SQLSERVER中忽略索引提示的使用技巧和注意事项,需要的朋友参考一下 当我们想让某条查询语句利用某个索引的时候,我们一般会在查询语句里加索引提示,就像这样 当在生产环境里面,由于这个索引提示的原因,优化器一般不会再去考虑其他的索引,那有时候这个索引提示可能会导致查询变慢 经过你的测试,发现确实是因为这个索引提示的关系导致查询变慢,但是SQL
问题内容: 我试图将数据插入到具有表列 (名称,值) 与 并得到以下异常: 另外,我也不能使用本机查询插入记录: 抛出另一个异常: 问题是: 查询字符串有什么问题? 非常感谢。 问题答案: 我解决了这个问题。 根据此, JPA中没有INSERT语句。 但是我可以用本机查询解决这个问题:我错误地放置了一个多余的;在查询末尾,因此可以通过将其删除来解决问题。
问题内容: 我在python中有一个文件名,我想从所有文件名中构造一个。 这似乎不起作用。怎么办 问题答案: 如果您具有可散列对象的列表(文件名可能是字符串,那么它们应该算在内): 您可以直接构造集合: 实际上,将这种方式与 任何可迭代对象一起使用! (鸭子打字不好吗?) 如果要迭代进行: 但是很少需要这样做。我只提到它是因为该方法非常有用。
问题内容: 1> 套装2排 2> 套装2排 3> 一组1行 为什么查询方式1>和2>会得到相同的结果?count(*)和count(somefiled)之间没有什么区别? 另外,查询2>和3>导致的结果不同,为什么 groupby 如此神奇?它是如何工作的? 更新:我正在使用MySQL5.1。:) 问题答案: 选择会给您一个结果集。如果按字段分组选择,则结果集的行将按该字段分组,并且结果集的每一行
问题内容: 我想创建一个KeyValue类,但以通用方式,这就是我写的内容: 错误显示:“令牌“>上的语法错误”,此令牌后应有标识符” 那我该如何在Java中创建一个通用构造函数呢? 问题答案: 您需要从构造函数的签名中删除:它已经隐式存在。