我有一个工作查询,如下所示:
SELECT TOP 1000
c.B,
c.N,
c.V,
c.T,
SIS = stuff((
SELECT ', ' + si.S
FROM
COMP com
JOIN CCA cca ON com.Cid = cca.CId
JOIN CC cc ON cca.Cid = cc.Cid
JOIN SI si ON si.SId = cc.SId
WHERE
com.N=c.N
FOR XML PATH('')), 1, 2, ''
)
FROM
COMP c
JOIN CCA cca ON c.Cid = cca.CId
JOIN CC cc ON cca.Cid = cc.Cid
JOIN SI si ON si.SId = cc.SId
where c.N like '%searchstring%'
and si.Sin like '%searchstring%'
group by c.B, c.N, c.V, c.T
order by c.N desc;
它给出了正确的结果。我正在做stuff()来获得逗号分隔的聚合。查询很慢。想知道是否有办法优化它?
答案 0 :(得分:1)
如果你可以改变你的方式,我建议你这样做:
COMP.N
和SIS
并对其应用c.N like '%searchstring%'
,这将减少计算SIS
的数量。JOIN
N
上的{临时表} JOIN SI
。{/ 1}
LEFT JOIN SI
更改为SI
,请注意,当条件超过NULL
时,它会删除read_int
个值。