我的应用程序对特定客户执行的查询非常慢。 我意识到客户在一张桌子上有很多记录。
查询是这样的
SELECT T1.Field1,BT.Field2, T3.Field3
FROM TABLE1 T1 INNER JOIN
BIGTABLE BT ON FIELDS INNER JOIN
TABLE2 T2 ON FIELDS
我注意到这样的评论结果更快了:
SELECT T1.Field1,/*BT.Field2,*/ T3.Field3
FROM TABLE1 T1 /*INNER JOIN
BIGTABLE BT ON FIELDS*/ INNER JOIN
TABLE2 T2 ON FIELDS
所以我尝试了这个技巧来减少BIGTABLE的大小:
--I use top 10 while the BIGTABLE contains 150000 records
SELECT top 10 *
INTO #BIGTABLE
FROM BIGTABLE
SELECT T1.Field1,BT.Field2, T3.Field3
FROM TABLE1 T1 INNER JOIN
#BIGTABLE BT ON FIELDS INNER JOIN
TABLE2 T2 ON FIELDS
DROP TABLE #BIGTABLE
在执行此操作之前,我期待更快的查询,但执行时间非常相似。 你能建议一种研究表现的方法吗?
感谢。
答案 0 :(得分:0)
要研究表现,你可以做几件事:
如果您从SSMS运行查询,则只需在运行查询之前包含实际执行计划(检查工具栏中的小图标)并运行它。看看sqlplan或者你可以在这里发布它。有时可能会出现“表扫描”或其他导致运行缓慢的资源消耗操作。该计划将帮助您了解。
除了你的查询之外,服务器上还可以运行其他东西。过去我使用Who Is Active Script from Adam Machanic来查找其他东西让服务器忙碌。查看您的SPID是否被其他查询阻止(如果您运行Adam的脚本,它会有一个blocking_session列,可以向您显示)。您需要几乎DBA权限才能运行该脚本。有些人不建议经常在生产服务器上运行此脚本。
您可以使用“WITH(READUNCOMMITED)”提示来查看是否有帮助。如果您不希望在查询中看到脏数据,则不建议这样做。