我有两个表 Channel 和 ChannelData。Channel Table 有 40 条记录,每分钟都会为 Channel Table 中的每个 Channel 插入一条记录到 ChannelData 表中。现在 ChannelData 表中有超过 1500 万条记录。我编写了如下查询来获取 ChannelData 表中 40 个通道的最新记录值。
select
max(chnldata.Id) as ChannelDataId,
chnl.id as ChannelId,
chnl.ChannelName as ChannelName,
chnldata.ChannelValue as channelValue,
chnl.ChannelMonitoringUnits as ChannelUnits,
chnldata.ChannelDataLogTime as channelDataLogTime,
chnl.StationId,
chnldata.Active
from
ChannelData as chnldata
inner join Channel as chnl on chnl.Id = chnldata.ChannelId
where
chnl.Active = 1
and
chnldata.ChannelDataLogTime in
(SELECT
MAX(chnldata1.ChannelDataLogTime)
FROM
ChannelData as chnldata1
where
chnldata1.ChannelId = chnl.Id)
group by
chnldata.Id,
chnl.id,
ChannelName,
ChannelValue,
chnl.ChannelMonitoringUnits,
ChannelDataLogTime,
chnl.StationId,
chnldata.Active
当我在 SQLServer 2008 Express Edition 上执行此查询时,需要 29 分钟才能获得结果,但是当我尝试在 SQLServer 2008 Standard Edition 上运行相同的查询时,在具有 1500 万个 ChannelData 表的数据库上花费了不到 1 分钟记录。有没有其他方法可以编写这个查询,这样我就可以在 SQL Server 2008 Express 中在一分钟内得到结果。