Channel と ChannelData の 2 つのテーブルがあります。チャネル テーブルには 40 のレコードがあり、1 分ごとにチャネル テーブルの各チャネルの ChannelData テーブルにレコードが挿入されます。現在、ChannelData テーブルには 1,500 万を超えるレコードが含まれています。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 で同じクエリを実行しようとすると、ChannelData テーブルが 1,500 万のデータベースで 1 分もかかりませんでした。記録。SQL Server 2008 Express で 1 分もかからずに結果を取得できるように、このクエリを作成する他の方法はありますか。