sql - 为什么当记录数增加时我的查询变得太慢
问题描述
我在 SQL Server 中有一个插入语句。
我尝试了一个较小的子集,速度很快
将数量增加到 100 万条记录,并且速度快 1 分 10 秒
现在我把它翻了一番,它似乎卡住了它现在已经运行了 10 分钟并且没有结果
我在 5 分钟时将计划包括在内。
https://www.brentozar.com/pastetheplan/?id=r15MPuC5u
也许有人可以告诉我如何改进这个过程。
PS。我在标签(RepID)上添加了非聚集索引。
Tag(iiD) 是主键
Reps(RepID) 是一个主键。
在我写这篇文章的时候。该过程于11:47结束
https://www.brentozar.com/pastetheplan/?id=HJd9uOCcu
这是我的代码
insert into R3..Tags (iID,DT,RepID,Tag,xmiID,iBegin,iEnd,Confidence,Polarity,Uncertainty,Conditional,Generic,HistoryOf,CodingScheme,Code,CUI,TUI,PreferredText,ValueBegin,ValueEnd,Value,Deleted,sKey,RepType)
SELECT T.iID,T.DT,T.RepID,T.Tag,T.xmiID,T.iBegin,T.iEnd,T.Confidence,T.Polarity,T.Uncertainty,T.Conditional,T.Generic,T.HistoryOf,T.CodingScheme,T.Code,T.CUI,T.TUI,T.PreferredText,T.ValueBegin,T.ValueEnd,T.Value,T.Deleted,T.sKey,R.RepType
FROM Recovery..tags T inner join Recovery..Reps R on T.RepID = R.RepID
where T.iID between 2000001 and 4000000
解决方案
(不能评论,放在这里)
我认为,您对此几乎无能为力,取决于您的硬件,11 分钟实际上可能还不错,在执行计划中,我可以看到一切正常。
但是为了您的信息,该插入语句的瓶颈是从 T"Recovery..tags" 表中读取数据,这花费了您 7 分钟的查询时间。(考虑到它需要读取 200 万行和返回很多列)
所以你唯一能做的就是找到一种方法来加快从链接服务器“恢复”中读取的速度。链接服务器通常是性能不佳的根源,特别是庞大的数据,这可能是由于网络不佳或网络繁忙等...
无论如何,一种解决方案是:
- 将数据从链接服务器拉到表中(直接)到 R3 服务器(直接),服务器在中间。这取决于您的场景,您可以
- 将您的查询更改为针对该表
这可以显着提高您的查询时间
推荐阅读
- python-3.x - What exceptions can be raised by `load_kube_config`?
- javascript - Postman Accesstoken 自动刷新问题
- visual-studio - Visual Studio 2017:在路径中找不到和或未创建 Exe
- css - 设计材料表以匹配设计
- reactjs - 使用反应将鼠标悬停在框上时如何显示按钮?
- google-bigquery - 无法使用从存储文件传输来更新大查询表
- cron - Pi Cron 作业无法运行
- excel - 在功能区中添加自定义选项卡
- java - 无法在 iText 核心 java 中生成报告
- mongodb - 如何在 Robo 3T (Robomongo) 中导出连接