Sql server 带有大表的内部联接减慢了查询速度
我的应用程序对特定客户执行的查询非常慢。 我意识到客户有很多记录,尤其是在一张表中 查询是这样的Sql server 带有大表的内部联接减慢了查询速度,sql-server,sql-server-2008-r2,query-performance,Sql Server,Sql Server 2008 R2,Query Performance,我的应用程序对特定客户执行的查询非常慢。 我意识到客户有很多记录,尤其是在一张表中 查询是这样的 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 /*IN
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
在执行此操作之前,我希望查询速度快得多,但执行时间非常相似。
你能建议一种研究表演的方法吗
谢谢。要研究性能,您可以做几件事: 如果您从SSMS运行查询,那么只需在运行查询之前在工具栏中选中一个小图标,然后运行查询即可。看看sqlplan,或者你可以把它发布在这里。有时可能会有表扫描或其他消耗资源的操作导致速度缓慢。这个计划会帮助你理解 除了您的查询之外,服务器上还可能运行其他东西,在过去,我一直在查找使服务器忙碌的其他东西。查看您的SPID是否被其他查询阻止如果您运行Adam的脚本,它会有一个blocking_session列显示这一点。运行脚本几乎需要DBA权限。有些人不建议经常在生产服务器上运行此脚本
您可以使用WITH READUNCOMMITED hint来查看这是否有帮助。如果您不想在查询中看到脏数据,则不推荐这样做。您可能只需要在联接中使用的列中需要索引。我不认为150000个记录是一个大表,特别是对于SQLServer。你能发布执行计划吗?可以是任何东西,但统计数据或索引可能已关闭。同时发布模式,如果你要加入未索引的大型varchar字段,你的日子会很不好过。在这里观看前2个或所有视频:这将对你有很大帮助:加入列的类型是什么?联接是否基于相等?哪些列是要联接的表的索引?您好。谢谢你的回复。我把计划贴在这里了你能告诉我些什么吗?EVA_REFERENCES是一个大表格如果你只想选择MF.ID_FUNZIONE和PA.ID_DIPENDENTE,那么你可以试试这个查询:select MF.ID_FUNZIONE,PA.ID\u DIPENDENTE=PA.ID\u DIPENDENTE=PA.ID\u DIPENDENTE和PA.STATO=1内部连接MSQ\u FUNZIONI MF ON MF.ID\u FUNZIONE=MPF.ID\u FUNZIONE在存在的地方从EVA\u参考中选择1内部连接APP\u SSHSR APP在APP.ID\u参考中选择1ER.ID_FOR_ALL=MF.ID_FUNZIONE