22,300
社区成员




SELECT DAY(MTime) AS MTime,
COUNT(DISTINCT EquipmentID) AS Num
INTO #temp
FROM YY_MonitorData
WHERE (
MTime >= '2018-10-01 00:00:00'
AND MTime < '2018-11-01 00:00:00'
)
AND (State = '正常')
AND (FJState = '正常')
AND (JHQState = '正常')
GROUP BY DAY(MTime);
SELECT A.DayText,
ISNULL(B.Num, 0) AS Num
FROM View_DayText AS A
LEFT OUTER JOIN #temp AS B
ON A.DayText = B.MTime
WHERE A.DayText <=
(
SELECT DATEDIFF(DAY, '2018-10-22', DATEADD(MONTH, 1, '2018-10-22'))
)
DROP TABLE #temp
--1. 加计算列
ALTER TABLE YY_MonitorData ADD DayText AS DAY(MTime) PERSISTED
--2. 创建新索引
CREATE INDEX ix_YY_MonitorData_MTime_EquipmentID_DayText ON YY_MonitorData(MTime,EquipmentID,DayText)
--3. 执行修改后的语句
SELECT A.DayText,
ISNULL(B.Num, 0) AS Num
FROM View_DayText AS A
LEFT OUTER JOIN (
SELECT DayText, --主要替换此处
COUNT(EquipmentID) AS Num
FROM YY_MonitorData
WHERE (
MTime >= '2018-10-01 00:00:00'
AND MTime < '2018-11-01 00:00:00'
)
AND (STATE = '正常')
AND (FJState = '正常')
AND (JHQState = '正常')
GROUP BY
EquipmentID
) AS B
ON A.DayText = B.MTime
WHERE A.DayText <= (
SELECT DATEDIFF(DAY, '2018-10-22', DATEADD(MONTH, 1, '2018-10-22'))
)
再看下需要多长时间?--1. 去一层嵌套
--2. 创建索引
-- create index ix_YY_MonitorData_MTime on YY_MonitorData(MTime)
--3. 请贴出 View_DayText 的全部实际内容
SELECT A.DayText,
ISNULL(B.Num, 0) AS Num
FROM View_DayText AS A
LEFT OUTER JOIN (
SELECT DAY(MTime) AS MTime,
COUNT(EquipmentID) AS Num
FROM YY_MonitorData
WHERE (
MTime >= '2018-10-01 00:00:00'
AND MTime < '2018-11-01 00:00:00'
)
AND (STATE = '正常')
AND (FJState = '正常')
AND (JHQState = '正常')
GROUP BY
EquipmentID
) AS B
ON A.DayText = B.MTime
WHERE A.DayText <= (
SELECT DATEDIFF(DAY, '2018-10-22', DATEADD(MONTH, 1, '2018-10-22'))
)