SELECT t.ID, t.ProjectNumber, t.ProjectRequirement, t.ProjectDescription, t.ProjectTypeID, map.TypeName as ProjectTypeName, map.DepartmentID, map.DepartmentName, t.ProjectGoal, t.ProductLine, t.ProjectStatus, t.SortCode, t.IsFromInterface, t.EnabledMark, t.CreateDate, (SELECT ISNULL(COUNT(0),0) FROM ProjectManagementDetail pm WHERE pm.ProjectManagementID=t.ID AND pm.DeleteMark=0) AS ProjectCount FROM ProjectManagement t left join Design_ProjectTypeMap map on t.ProjectTypeID=map.ID WHERE 1=1 and t.DeleteMark=0
这条查询语句的性能优化点较多,以下是一些常见的优化措施:
-
避免使用
SELECT *
语句,只选择需要的列,减少数据传输和处理的开销。 -
尽量使用
INNER JOIN
代替LEFT JOIN
,因为INNER JOIN
比LEFT JOIN
效率更高。如果确实需要LEFT JOIN
,可以考虑把过滤条件放在ON
子句中,而不是在WHERE
子句中。 -
使用表别名来增加可读性,并提高查询性能。
-
尽量避免使用子查询,可以将子查询转换为关联查询(JOIN)。
-
对于常用到的查询条件,可以创建索引来提高查询效率。
-
避免使用
ISNULL
函数,可以使用COALESCE
函数代替。 -
可以使用查询计划(Query Plan)来查看查询语句的性能瓶颈,并进行调整。
针对以上建议,下面给出一个优化后的SQL语句供参考:
SELECT t.ID, t.ProjectNumber, t.ProjectRequirement, t.ProjectDescription, t.ProjectTypeID, map.TypeName as ProjectTypeName, map.DepartmentID, map.DepartmentName, t.ProjectGoal, t.ProductLine, t.ProjectStatus, t.SortCode, t.IsFromInterface, t.EnabledMark, t.CreateDate, COALESCE(pm.ProjectCount, 0) AS ProjectCount FROM ProjectManagement t LEFT JOIN ProjectTypeMap map ON t.ProjectTypeID = map.ID LEFT JOIN (SELECT ProjectManagementID, COUNT(*) AS ProjectCount FROM ProjectManagementDetail WHERE DeleteMark = 0 GROUP BY ProjectManagementID) pm ON t.ID = pm.ProjectManagementID WHERE t.DeleteMark = 0
标签:语句,map,JOIN,WHERE,查询,sql,优化,ID,pm From: https://www.cnblogs.com/shy1766IT/p/17970219