查询SQL Server 2000和SQL Server 2005之间的性能差异
最近一直将SQL Server 2000中的遗留数据库移至SQL Server 2005。
我做了以下事情:
我偶然发现的其中一个问题是,一个查询似乎在恢复的SQL 2005数据库上花费了很长时间(实际上是5分钟),而在原始SQL 2000数据库中花费了3秒。
这是特定的查询:
SELECT *
FROM Users
LEFT OUTER JOIN STAFF_Movement
ON Users.USERS_ID = STAFF_Movement.MOVEM_USERS_ID
WHERE
(
(
STAFF_Movement.MOVEM_Date = (
SELECT MAX(MOVEM_Date)
FROM STAFF_Movement sm
WHERE sm.MOVEM_USERS_ID = Users.USERS_ID
)
)
OR
(
STAFF_Movement.MOVEM_Date IS NULL
)
)
AND (Users.USERS_IsUser = 1)
ORDER BY Users.USERS_LastName, Users.USERS_FirstName
在经历了一些头疼的尝试和错误之后,我发现当我像SQL 2005数据库一样重新编写了这个查询语句时,它再次执行得非常快,就像它在SQL 2000上所做的那样:
SELECT *
FROM Users u1
LEFT JOIN STAFF_Movement sm1 ON u1.USERS_ID = sm1.MOVEM_USERS_ID
AND
(
(
sm1.MOVEM_Date = (
SELECT MAX(sm.MOVEM_Date)
FROM STAFF_Movement sm
WHERE sm.MOVEM_USERS_ID = u1.USERS_ID
)
)
OR
(
sm1.MOVEM_Date IS NULL
)
)
WHERE
(u1.USERS_IsUser = 1)
ORDER BY u1.USERS_LastName, u1.USERS_FirstName
所以,基本上,我所做的是将条件从where子句中取出,并将其整合到LEFT JOIN逻辑中。
所以,尽管我自己找到了解决方案,但我仍然有以下问题未得到解答:
我必须补充一件重要的事情:这个数据库中的所有主键都是数据类型GUID(不是我的设计,...我个人从不使用GUID)。 这可能会影响性能?
感谢您的回复。
马蒂厄
MSSQL Server在每个版本中都会有显着的改进。无论何时在数据库版本之间进行迁移,您都应该查看新版本中所做的更改。
链接地址: http://www.djcxy.com/p/95649.html上一篇: Query performance difference between SQL Server 2000 and SQL Server 2005