当前位置: 代码迷 >> Sql Server >> 查询优化,查询时间太久了,怎么优化
  详细解决方案

查询优化,查询时间太久了,怎么优化

热度:84   发布时间:2016-04-24 10:16:27.0
查询优化,查询时间太久了,如何优化?
有如下一个存储过程,执行该存储过程平均每次需要10秒左右,
为什么会需要这么长的时间呢?是数据表太大了的问题呢?
还是我的存储过程有问题呢(是不是UNION ALL太耗时间了啊)?
有办法优化吗?

DECLARE @SQL varchar(max)
SET @SQL = ''

SELECT @Sql = 
@Sql + 'SELECT 
[Project_Name],
[Station],
[Barcode_SN]
FROM ' 
+ NAME + ' A WITH(NOLOCK),
(SELECT   
MAX(ID) AS ID
     FROM     
' + NAME + ' WITH(NOLOCK)
     GROUP BY [Project_Name], [Barcode_SN], SUBSTRING([Station] , 0 , charindex(''_'', [Station]))) B
WHERE A.ID = B.ID' + 
' AND A.[Upload_DateTime] >= ' + '''' + @StartTime + '''' + 
' AND A.[Upload_DateTime] < ' + '''' + @EndTime + '''' + 
' UNION ALL '
FROM 
SYS.TABLES 
WHERE
LEFT(NAME, '9') = 'LOG_INFO_'

SET @SQL = LEFT(@SQL, LEN(@SQL)-10)

SELECT @Sql = 'SELECT
[Project_Name] as ''product'',
[Station] as ''station_id''
FROM '
+ '(' + @Sql + ') t'
 +' GROUP BY 
[Project_Name], 
[Station]'

EXEC(@SQL)

------解决方案--------------------
设计问题,非改这个SQL能大幅提长效率
------解决方案--------------------
1、每个表的ID加一个聚集索引,
2、每个表的[Upload_DateTime]加一个非聚集索引
  相关解决方案