读书人

请大家看看上面的语句有没有可以优化

发布时间: 2013-01-02 13:08:44 作者: rapoo

请大家看看,下面的语句有没有可以优化的地方,感觉速度很慢


SELECT (SELECT ParentID
FROM stable
WHERE (cpid = a.cpid)) AS ParentID, cpid, CONVERT(varchar(10), doTime, 120) AS rq,
(SELECT TOP (1) doTime
FROM t_table
WHERE (cpid = a.cpid) AND (CONVERT(varchar(10), doTime, 120) = CONVERT(varchar(10), a.doTime, 120)) AND (CONVERT(varchar(8), doTime, 24)
BETWEEN '00:00:00' AND '03:59:59')
ORDER BY dtp) AS T0_4,
(SELECT TOP (1) doTime
FROM t_table AS t_table_5
WHERE (cpid = a.cpid) AND (CONVERT(varchar(10), doTime, 120) = CONVERT(varchar(10), a.doTime, 120)) AND (CONVERT(varchar(8), doTime, 24)
BETWEEN '04:00:00' AND '07:59:59')
ORDER BY dtp) AS T4_8,
(SELECT TOP (1) doTime
FROM t_table AS t_table_4


WHERE (cpid = a.cpid) AND (CONVERT(varchar(10), doTime, 120) = CONVERT(varchar(10), a.doTime, 120)) AND (CONVERT(varchar(8), doTime, 24)
BETWEEN '08:00:00' AND '11:59:59')
ORDER BY dtp) AS T8_12,
(SELECT TOP (1) doTime
FROM t_table AS t_table_3
WHERE (cpid = a.cpid) AND (CONVERT(varchar(10), doTime, 120) = CONVERT(varchar(10), a.doTime, 120)) AND (CONVERT(varchar(8), doTime, 24)
BETWEEN '12:00:00' AND '15:59:59')
ORDER BY dtp) AS T12_16,
(SELECT TOP (1) doTime
FROM t_table AS t_table_2
WHERE (cpid = a.cpid) AND (CONVERT(varchar(10), doTime, 120) = CONVERT(varchar(10), a.doTime, 120)) AND (CONVERT(varchar(8), doTime, 24)
BETWEEN '16:00:00' AND '19:59:59')
ORDER BY dtp) AS T16_20,
(SELECT TOP (1) doTime


FROM t_table AS t_table_1
WHERE (cpid = a.cpid) AND (CONVERT(varchar(10), doTime, 120) = CONVERT(varchar(10), a.doTime, 120)) AND (CONVERT(varchar(8), doTime, 24)
BETWEEN '20:00:00' AND '23:59:59')
ORDER BY dtp) AS T20_24
FROM t_table AS a
GROUP BY cpid, CONVERT(varchar(10), doTime, 120)



需要在stable 和t_table上进行相关操作么
[解决办法]
太多子查询了 建议把一些子查询分出来使用临时表分布处理
[解决办法]
把执行计划贴出来

读书人网 >SQL Server

热点推荐