Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 带有大表的内部联接减慢了查询速度_Sql Server_Sql Server 2008 R2_Query Performance - Fatal编程技术网

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