内部加入大表减慢查询

内部加入大表减慢查询

问题描述:

我的应用程序对特定客户执行的查询非常缓慢。 我意识到客户在一张桌子上有很多记录。内部加入大表减慢查询

查询是这样的

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 

执行此操作之前,我期待更快的查询,但执行时间非常相似。 你能否建议一种研究表现的方法?

谢谢。

+3

您可能只需要在连接中使用的列索引。 –

+2

我不认为150,000条记录是一个“大”表,特别是对于SQL Server。你能发布执行计划吗?可能是任何事情,但统计数据或索引可能关闭。如果您加入未索引的大型varchar字段,您也将遇到不好的时间。 –

+2

在这里观看前两部(或所有)视频:这将帮助你大量:https://www.brentozar.com/archive/2016/10/think-like-engine-class-now-free-开源/ –

研究的性能,你可以做几件事情:

如果您运行从SSMS查询然后简单地包括实际的执行计划(请在工具栏上的小图标)运行查询之前,并运行它。看看sqlplan或者你可以在这里发布它。有时会出现“表扫描”或其他耗费资源的操作,导致缓慢。该计划将帮助你理解。

除了您的查询之外,服务器上还可能运行其他功能,在过去,我使用Who Is Active Script from Adam Machanic来查找其他什么使服务器保持忙碌状态。看看你的SPID是否被其他查询阻止(如果你运行亚当的脚本,它有一个blocking_session列会告诉你)。您几乎需要DBA权限才能运行该脚本。有些人不建议经常在生产服务器上运行这个脚本。

您可以使用“WITH(READUNCOMMITED)”提示来查看是否有帮助。如果您不希望在查询中看到脏数据,则不推荐这样做。

+0

嗨。谢谢回复。我在这里贴上了这个计划https://www.brentozar.com/pastetheplan/?id=B1MIB96Mb你能说点什么吗? – LaBracca

+0

EVA_REFERENCES是大表 – LaBracca

+0

如果你只需要选择MF.ID_FUNZIONE和PA.ID_DIPENDENTE那么你可以尝试此查询: '从 选择MF.ID_FUNZIONE,PA.ID_DIPENDENTE PER_ANAGRAFICA PA INNER JOIN MSQ_PERS_FUNZIONI强积金强积金。 ID_DIPENDENTE = PA.ID_DIPENDENTE AND PA.STATO = 1 INNER JOIN MSQ_FUNZIONI MF ON MF.ID_FUNZIONE = MPF.ID_FUNZIONE WHERE EXISTS(SELECT 1 FROM EVA_REFERENCES ER INNER JOIN \t \t \t \t APP_SSHSR APP ON APP.ID_REF_IS_SS_PERIODICO_MANSIONI = ER.ID_EVA_REFERENCE_TYPES \t \t \t \t哪里ER。ID_FOR_ALL = MF.ID_FUNZIONE)' – Nachi