sql - 缓慢插入但快速选择查询
问题描述
带有连接的选择查询在不到 1 秒的时间内返回结果(返回 1000 行:600 毫秒),但插入临时表或物理表需要 15-16 秒。
- 测试 io 性能:没有任何连接的 select 或 insert into 需要亚秒来写入 1000 行。
- 尝试跟踪标志 1118
- 尝试在临时表上添加聚集索引,并使用 tabblock 和 maxdop 提示插入。
这些都没有提高性能。
谢谢你们的评论。需要每 5 秒从 Kafka 插入 6000 到 20000 行...
- 我使用表类型变量将数据从 kafka 获取到 sql server
- 将其作为参数传递给存储过程
- 将此与其他表连接的数据加载到临时表中#table
- 我使用#table 将数据合并到应用程序表中
找到了一种解决方法,可以帮助我实现目标周转时间,但不完全知道行为的原因。正如我在问题陈述中提到的,瓶颈是编写将表变量与其他各种表连接到临时表的 select 语句的结果集。我将其放入存储产品中,并将存储过程的执行返回到临时表。现在插入需要不到 1 秒
SELECT
i.Id AS IId,
df.Id AS dfid,
MAX(CASE
WHEN lp.Value IS NULL and f.pnp = 1 THEN 0
WHEN lp.Value = 0 and f.tzan = 1 and f.pnp = 0 THEN NULL
ELSE lp.Value
END) 'FV',
MAX(lp.TS),
MAX(lp.Eid),
MAX(0+lp.IsDelayedStream)
FROM
f1 f WITH (NOLOCK)
INNER JOIN ft1 ft WITH (NOLOCK) ON f.FeedTypeId = ft.Id
INNER JOIN FeedDataField fdf WITH (NOLOCK)
ON fdf.FeedId = f.Id
INNER JOIN df1 df WITH (NOLOCK)
ON fdf.dfId = df.Id
INNER JOIN ds1 ds WITH (NOLOCK)
ON df.dsid = ds.Id
INNER JOIN dp1 dp WITH (NOLOCK)
ON ds.dpId = dp.Id
INNER JOIN dc1 dc WITH (NOLOCK)
ON dc.dcId = ds.dcId
INNER JOIN i1 i WITH (NOLOCK)
ON f.iId = I.Id
INNER JOIN id1 id WITH (NOLOCK)
ON id.iId = i.Id
INNER JOIN IdentifierType it WITH (NOLOCK)
ON id.ItId = it.Id
INNER JOIN ivw_Tdf tdf WITH(NOEXPAND)
ON tdf.iId = i.Id
INNER JOIN z.dbo.[tlp] lp
ON lp.Ticker = id.Name AND lp.Field = df.SourceName AND
lp.Contributor = dc.Name AND lp.YellowKey = tdf.TextValue
WHERE
ft.Name in ('X', 'Y') AND f.SA = 1
AND dp.Name = 'B' AND (i.Inactive IS NULL OR i.Inactive = 0)
AND it.Name = 'T' AND id.ValidTo = @InfinityDate
AND tdf.SourceName = 'MSD'
AND tdf.ValidTo = @Infinity
GROUP BY i.Id, df.Id
OPTION(MAXDOP 4, OPTIMIZE FOR (@Infinity = '9999-12-31 23:59:59',
@InfinityDate = '9999-12-31))
解决方案
推荐阅读
- django - django 视图中变量 {{ media }} 的上下文值
- html - 居中对齐 100% 宽度的元素
- python - 尝试在 python 中为先知模型绘制实际与预测时的 matplotlib 错误消息
- scala - 限制函数泛型类型参数
- javascript - Recusive 函数的问题
- unity3d - 当我更改材质时,Unity 发射没有更新
- html - 从 PDF 中的 HTML 视图将图像打印为背景
- r - 提高 PLS-SEM 中的 Tucker-Lewis 指数 (TLI)
- python - 无法找出如何将 datetime dtype 指定为 Numba @guvectorize
- javascript - CORS 错误是否与速率限制有关?