仅当不存在记录时,才通过存储过程从TVP列表中插入项目-性能降低

莫丁

我需要从.NET 4.5应用程序调用存储过程。作为ORM,我使用Dapper。

存储过程接受TVP参数,并且Cars仅在car_id不存在带有的汽车时将汽车从列表插入到表中

桌子:

CREATE TABLE USERS
(
    CAR_ID int IDENTITY PRIMARY KEY,
    CAR_NAME varchar(255),
)

TVP:

CREATE TYPE dbo.CarType
AS TABLE
(
    CAR_ID int null,
    CAR_NAME varchar(800) not null,
);

存储过程:

CREATE PROCEDURE dbo.InsertCars
    @Cars AS CarType READONLY
AS
    BEGIN
        DECLARE @CountOfNew int

        INSERT INTO CARS (CAR_ID, CAR_NAME)
        SELECT C.CAR_ID, C.CAR_NAME
        FROM @CARS C
        WHERE NOT EXISTS(SELECT 1 FROM CARS WHERE CAR_ID = C.CAR_ID)

        SET @CountOfNew = @@ROWCOUNT
        RETURN @CountOfNew      
    END

问题是存储过程的性能。如果表中存在3万多辆汽车,则存储过程调用将花费20秒。

我调试我的应用程序,通过SQL Server Management Studio进行测试,并且我认为瓶颈是存储过程。

任何建议如何调整此存储过程。

我使用SQL Server 2012。

谢谢

保罗·威廉姆斯

运行SQL Server Profiler,并包括Showplan Statistics XML Profile事件。针对大型案例(> = 30,000辆汽车)运行查询,然后查看其效果。

根据您的SQL Server版本,您可以尝试MERGE(如果在SQL 2008或更高版本上),或者在LEFT JOIN WHERE Car_ID IS NULL如下所示:

INSERT INTO CARS (CAR_ID, CARNAME)
SELECT C.CAR_ID, C.CARNAME
FROM @CARS C
LEFT JOIN Cars ON Cars.CAR_ID = C.CAR_ID
WHERE Cars.Car_ID IS NULL -- the car does not already exist

另外,您可以尝试声明CarType具有CAR_ID的PRIMARY KEY。

(我假设TVP CarType密钥是CAR_ID,而不是您编写的CARID。而且,您将此表声明为USERS而不是CARS。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

列表视图中的性能降低

来自分类Dev

读取Excel时性能降低

来自分类Dev

当 reloadData 时 UICollectionView 滚动性能降低

来自分类Dev

Docker容器中的网络性能降低

来自分类Dev

LINQ查询中的性能降低

来自分类Dev

R中嵌套循环的性能降低

来自分类Dev

Docker容器中的磁盘性能降低

来自分类Dev

zgrep在多个文件中的性能降低

来自分类Dev

SQL性能降低(改进插入到临时表中)

来自分类Dev

在SQL Server中执行ORDER BY时性能降低

来自分类Dev

在TensorFlow中解压张量层的位时性能降低

来自分类Dev

TensorFlow:在输入端获取渐变时性能降低

来自分类Dev

更新MYSQL表时While循环内的性能降低

来自分类Dev

mysql查询,选择或更新时性能降低

来自分类Dev

.png动画在Spritekit中的性能降低

来自分类Dev

IE 11中PrimeNG Turbo Table的性能降低

来自分类Dev

T-SQL中递归CTE的性能降低

来自分类Dev

ASP页面中的许多javascripts标签使性能降低

来自分类Dev

WMI win32_groupuser在PowerShell中的性能降低

来自分类Dev

在测试值是否在LINQ查询的列表中时会对性能降低感到好奇

来自分类Dev

在MySQL中运行重复的复杂空间查询时性能降低

来自分类Dev

使用分区键和远程行键时,Azure表的查询性能降低

来自分类Dev

创建文件时SQL Server 2012 FileTable的性能降低(集成Lucene.NET)

来自分类Dev

Nvidia驱动程序未在Xubuntu 17.04上加载,使用1050卡时性能降低

来自分类Dev

在C ++中用变量除以const进行除以时性能降低

来自分类Dev

创建文件时SQL Server 2012 FileTable的性能降低(集成Lucene.NET)

来自分类Dev

从USB设备复制文件或从USB设备复制文件时性能降低

来自分类Dev

使用Microsoft.office.Interop.Excel读取Excel时性能降低

来自分类Dev

加入AD并使用AD帐户时Windows 10的运行性能降低

Related 相关文章

  1. 1

    列表视图中的性能降低

  2. 2

    读取Excel时性能降低

  3. 3

    当 reloadData 时 UICollectionView 滚动性能降低

  4. 4

    Docker容器中的网络性能降低

  5. 5

    LINQ查询中的性能降低

  6. 6

    R中嵌套循环的性能降低

  7. 7

    Docker容器中的磁盘性能降低

  8. 8

    zgrep在多个文件中的性能降低

  9. 9

    SQL性能降低(改进插入到临时表中)

  10. 10

    在SQL Server中执行ORDER BY时性能降低

  11. 11

    在TensorFlow中解压张量层的位时性能降低

  12. 12

    TensorFlow:在输入端获取渐变时性能降低

  13. 13

    更新MYSQL表时While循环内的性能降低

  14. 14

    mysql查询,选择或更新时性能降低

  15. 15

    .png动画在Spritekit中的性能降低

  16. 16

    IE 11中PrimeNG Turbo Table的性能降低

  17. 17

    T-SQL中递归CTE的性能降低

  18. 18

    ASP页面中的许多javascripts标签使性能降低

  19. 19

    WMI win32_groupuser在PowerShell中的性能降低

  20. 20

    在测试值是否在LINQ查询的列表中时会对性能降低感到好奇

  21. 21

    在MySQL中运行重复的复杂空间查询时性能降低

  22. 22

    使用分区键和远程行键时,Azure表的查询性能降低

  23. 23

    创建文件时SQL Server 2012 FileTable的性能降低(集成Lucene.NET)

  24. 24

    Nvidia驱动程序未在Xubuntu 17.04上加载,使用1050卡时性能降低

  25. 25

    在C ++中用变量除以const进行除以时性能降低

  26. 26

    创建文件时SQL Server 2012 FileTable的性能降低(集成Lucene.NET)

  27. 27

    从USB设备复制文件或从USB设备复制文件时性能降低

  28. 28

    使用Microsoft.office.Interop.Excel读取Excel时性能降低

  29. 29

    加入AD并使用AD帐户时Windows 10的运行性能降低

热门标签

归档