sql - 更新表中的 20 行确实很慢

标签 sql query-optimization

我不明白为什么只更新表中的 21 行需要这么多时间。

第 1 步:我从 StagingTable 创建#tempTable(它的数据永远不会超过 20 行)

CREATE TABLE #tmpTable (
    ID INT NULL,
    UniqueID INT NULL,
    ReportDate VARCHAR(15) NULL,
    DOB Datetime NULL,
    Weight VARCHAR(15) NULL,
    Height VARCHAR(15) NULL)

INSERT INTO #tempTable (
    ID,
    UniqueID,
    ReportDate,
    DOB,
    Weight,
    Height)

SELECT 
    A.ID,
    A.UniqueID,
    A.ReportDate,
    A.DOB,
    A.Weight,
    A.Height
FROM [testDB].[StagingTable] as A
WHERE A.UniqueID = '12345'

第 2 步:更新 FinalTable:

UPDATE [Customers].[FinalTable]
SET ID = B.ID,
    UniqueID = B.UniqueID,
    ReportDate = B.ReportDate,
    DOB = B.DOB,
    Weight = B.Weight,
    Height = B.Height
FROM #tempTable AS B
WHERE [Customers].[FinalTable].[ReportDate] = B.ReportDate
AND [Customers].[FinalTable].[DOB] = B.DOB

此查询需要 30 多分钟! 有什么办法可以加快这个更新过程吗?有什么想法我可能做错了什么吗?

我只是想补充一点,FinalTable 有数百万行...

任何帮助将不胜感激。 谢谢!

最佳答案

如果只有 30 个匹配项,那么您需要在 #temptable(ReportDate, DOB) 上建立索引:

create index idx_temptable_2 on #temptable(ReportDate, DOB);

关于sql - 更新表中的 20 行确实很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63001562/

相关文章:

MySQL DBCC CHECKIDENT语法错误

mysql - 寻找重复的战斗

php - get_terms() 检索 90K 行,产生性能问题

php - 如何将逗号分隔的字符串转换为 SET 以用于 MySQL 中的另一个查询?

sql - 需要有关使用动态列编写 SQL 查询的帮助

sql - 如何在 SQL 的 select 语句中分配一个随机值?

sql连接具有相同列名的表

sql - Symfony2 + Doctrine - 过滤

java - MySQL 在 Preparing Statement 中以非常奇怪的行为被阻止

php - MySql 查询 - 使用 varchars、索引进行优化,运行需要一个多小时