SQL优化

龙虾小兵 软件设计师  2015-08-03 05:45:10
SQL语句如下所示:

SELECT A.VariableId AS VariableID,A.OrganizationID,SUM(A.FormulaValue) AS FormulaValue
FROM [zc_nxjc_byc_byf].[dbo].HistoryFormulaValue AS A
WHERE
A.VariableId IS NOT NULL
AND
A.VariableId<>''
AND
(vDate>='2015-08-02 16:00:00' AND vDate<='2015-08-02 23:59:59')
GROUP BY A.VariableId,A.OrganizationID
UNION
SELECT A.VariableId AS VariableID,A.OrganizationID,SUM(A.FormulaValue) AS FormulaValue
FROM [zc_nxjc_byc_byf].[dbo].HistoryMainMachineFormulaValue AS A
WHERE
A.VariableId IS NOT NULL
AND
A.VariableId<>''
AND
(vDate>='2015-08-02 16:00:00' AND vDate<='2015-08-02 23:59:59')
GROUP BY A.VariableId,A.OrganizationID
ORDER BY A.VariableId,A.OrganizationID
执行计划如下:

表结构如下:

现在查询时间大约四十秒左右,请问怎么优化!
...全文
105 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
龙虾小兵 2015-08-08
引用 4 楼 yupeigu 的回复:
你的主键是联合主键是吧,有3个字段。 你看看你的主键所对应的索引是如何的,确保 以字段 vDate开头
谢谢 正如你所说的,问题总有找到了
回复
你的主键是联合主键是吧,有3个字段。 你看看你的主键所对应的索引是如何的,确保 以字段 vDate开头
回复
龙虾小兵 2015-08-03
引用 1 楼 yangb0803 的回复:
建 VariableId, OrganizationID的联合索引
表的主键对建立索引有影响吗
回复
道玄希言 2015-08-03
vDate>='2015-08-02 16:00:00' AND vDate<='2015-08-02 23:59:59' 你是不是想查询 16点到 24点之间的数据? 这里应该这么写: vDate >= '2015-08-02 16:00:00' AND vDate < '2015-08-03 00:00:00' 因为你 2015-08-02 23:59:59 之后,还会有3位的毫秒信息的。比如时间为 '2015-08-02 23:59:59 456' 的, 你的条件,就会漏掉
回复
道玄希言 2015-08-03
建 VariableId, OrganizationID的联合索引
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2015-08-03 05:45
社区公告
暂无公告