服务器移动后,查询不再起作用

时间:2012-03-04 23:46:21

标签: sql asp-classic sql-server-express

我需要一些帮助解决让我发疯的问题!

我已将ASP + SQL Server应用程序从旧服务器移动到新服务器。

旧的是带有MSDE的Windows 2000服务器,新的是带有SQL Server 2008 Express的Windows 2008。

一切都很好,甚至更快,除了一个该死的函数,其asp页面给出了一个时间。

我在管理查询窗口中尝试了该页面中的查询,它永远不会结束,而在旧服务器中,它需要大约1分钟才能完成。

查询是这样的:

SELECT DISTINCT 
    TBL1.TBL1_ID, 
    REPLACE(TBL1_TITOLO, CHAR(13) + CHAR(10), ’ ’), 
    COALESCE(TBL1_DURATA, 0), TBL1_NUMERO, 
    FLAG_AUDIO 
FROM 
    SPOT AS TBL1 
INNER JOIN 
    CROSS_SPOT AS CRS ON CRS.TBL1_ID = TBL1.TBL1_ID 
INNER JOIN 
    DESTINATARI_SPOT AS DSP ON DSP.TBL1_ID = TBL1.TBL1_ID 
WHERE 
    DSP.PTD_ID_PUNTO = 1044 
    AND DSP.DSP_FLAG_OK = 1 
    AND TBL1.FLAG_AUDIO_TESTO = 1 
    AND TBL1.FLAG_AUDIO_GRAFICO = ’A’ 
    AND CRS.CRS_STATO > 2 
    OR TBL1.TBL1_ID IN (SELECT ID 
                        FROM V_VIEW1 
                        WHERE ID IS NOT NULL AND V_VIEW1.ID_MODULO = 403721) 
    OR TBL1.TBL1_ID IN (SELECT TBL1_ID 
                        FROM V_VIEW2 
                        WHERE V_VIEW2.ID_PUNTO = 1044)  
ORDER BY 
    TBL1_NUMERO 

我尝试将最后一行中的2个视图转换为表格,并且查询有效,即使比以前慢一点。

我已经使用它的备份/恢复功能迁移了数据库。可能是和索引问题? 有什么建议吗?

提前致谢!

的Alessandro

1 个答案:

答案 0 :(得分:2)

执行命令

--Defrag all indexes
sp_msForEachTable 'DBCC DBREINDEX (''?'')'

--Update all statistics
sp_msForEachTable 'UPDATE STATISTICS ? WITH FULLSCAN'

如果这不是“只是修复它”,那么SQL Server优化器中的一些微妙的“改进”会使事情变得更糟。

尝试使用索引调整向导(或其等效的SSMS2008)。

之后,您将不得不开始挑选查询,删除内容直到它快速运行。由于您有2个OR子句,因此您基本上有3个单独的查询:

SELECT ... FROM ...
WHERE DSP.PTD_ID_PUNTO = 1044 
AND DSP.DSP_FLAG_OK = 1 
AND TBL1.FLAG_AUDIO_TESTO=1 
AND TBL1.FLAG_AUDIO_GRAFICO=’A’ 
AND CRS.CRS_STATO>2 

--UNION

SELECT ... FROM ...
WHERE TBL1.TBL1_ID IN (
   SELECT ID 
   FROM V_VIEW1 
   WHERE ID IS NOT NULL 
   AND V_VIEW1.ID_MODULO = 403721
) 

--UNION 

SELECT ... FROM ...
WHERE TBL1.TBL1_ID IN (
   SELECT TBL1_ID 
   FROM V_VIEW2 
   WHERE V_VIEW2.ID_PUNTO = 1044
)  

看哪一个是最慢的。

P.S。一分钟的查询非常糟糕。我的观点是查询应该立即返回(在人类观察的范围内)