두 개의 테이블 Channel 및 ChannelData가 있습니다. 채널 테이블에는 40 개의 레코드가 있으며, 1 분마다 레코드가 채널 테이블의 각 채널에 대한 ChannelData 테이블에 삽입됩니다. 이제 ChannelData 테이블에 1,500 만 개가 넘는 레코드가 있습니다. ChannelData 테이블의 40 개 채널에 대해 최근 기록 된 값을 얻기 위해 다음과 같은 쿼리를 작성했습니다.SQL Server Express에서 쿼리를 실행하는 데 너무 오래 걸림
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
나는 결과를 얻을 수는 29 분 걸립니다,하지만 난 SQLServer에 2008 표준 버전에서 동일한 쿼리를 실행하려고 할 때 그것은 미만의 1 분했다 SQLServer에 2008 익스프레스 에디션에이 쿼리를 실행하고 때 1,500 만 레코드의 ChannelData 테이블을 가진 데이터베이스. 이 쿼리를 작성하는 다른 방법이 없으므로 SQL Server 2008 Express에서 1 분 이내에 결과를 얻을 수 있습니다.