我从表中选择时遇到问题。我运行下面的查询:以分组方式选择需要很长时间
DECLARE @FactId nvarchar (MAX)
set @FactId = '2379233,2379237,2379244,2379246,2379249,2379250,2379254,2379255,2379257,2379260,2379262,2379264,2379266,2379268,2379270,2379276,2379279,2379284,2379285,2379293,2379294,2379298,2379300,2379305,2379308,2379310,2379313';
BEGIN
SELECT
(apd.USS) as USS, (apd.Area) as Area, P.[Description]
FROM
[gisoo].AdministrationPileDetail apd
INNER JOIN
[gisoo].Locality L on L.LocalityId = apd.LocalityId
INNER JOIN
[gisoo].Province P on P.CountryId = L.CountryId AND P.Provinceid = L.ProvinceId
WHERE
apd.FactId IN (SELECT * FROM [gisoo].[ItemListToTable](@FactId))
AND L.ProvinceId IS NOT NULL
AND L.DepartmentId IS NOT NULL
END
GO
此选择划分nvarchar
(@FactId
)入表中所有分离ID:
SELECT *
FROM [gisoo].[ItemListToTable](@FactId)
查询有12000行,它需要两秒钟,但当我运行该组时,需要40秒。
DECLARE @FactId nvarchar (MAX)
set @FactId = '2379233,2379237,2379244,2379246,2379249,2379250,2379254,2379255,2379257,2379260,2379262,2379264,2379266,2379268,2379270,2379276,2379279,2379284,2379285,2379293,2379294,2379298,2379300,2379305,2379308,2379310,2379313';
BEGIN
SELECT
SUM(apd.USS) AS USS,
SUM(apd.Area) AS Area,
P.[Description]
FROM
[gisoo].AdministrationPileDetail apd
INNER JOIN
[gisoo].Locality L ON L.LocalityId = apd.LocalityId
INNER JOIN
[gisoo].Province P ON P.CountryId = L.CountryId AND P.Provinceid = L.ProvinceId
WHERE
apd.FactId IN (SELECT * FROM [gisoo].[ItemListToTable](@FactId))
AND L.ProvinceId IS NOT NULL
AND L.DepartmentId IS NOT NULL
GROUP BY
P.[Description]
END
GO
这两个表都没有索引。
我使用的是SQL Server 2008 R2和查询也有人在SQL Server 2012测试
什么类型是描述列?你是否赞成查询计划?您是否尝试过索引说明列? – Juan
描述char(30)null。 我检查计划,并说我只能使用索引优化30%。我的查询时间很长。 提取数据描述只有71行的表省。 –
最后,由应用程序完成组,响应只有3秒。在SQL查询内我没有发现我的问题 –