当前位置: 首页 > 知识库问答 >
问题:

SQL Server删除性能问题

党祖鹤
2023-03-14

我有一张大约有一百万行的桌子。我们的部分维护包括每天删除旧行,但这需要大约40分钟。

delete语句是:

DELETE 
  FROM [dbGlobalPricingMatrix].[dbo].[tblPricing]
  WHERE type = 'car'
  AND capid NOT IN
  (SELECT cder_id  FROM PUB_CAR.dbo.CapDer WHERE cder_discontinued 
IS NULL OR DATEDIFF(dd,cder_discontinued,GETDATE()) <= 7)
  AND source = @source

我能做些什么来提高性能吗?

谢谢

根据要求:

CREATE TABLE [dbo].[tblPricing](
[id] [int] IDENTITY(1,1) NOT NULL,
[type] [varchar](50) NULL,
[capid] [int] NULL,
[source] [varchar](50) NULL,
[product] [varchar](50) NULL,
[term] [int] NULL,
[milespa] [int] NULL,
[maintained] [bit] NULL,
[price] [money] NULL,
[created] [datetime] NULL,
[updated] [datetime] NULL,
[notes] [varchar](1000) NULL,
[painttype] [char](1) NULL,
[activeflag] [bit] NULL,
[DealerId] [int] NULL,
[FunderId] [int] NULL,
[IsSpecial] [bit] NULL,
[username] [varchar](50) NULL,
[expiry] [datetime] NULL,
 CONSTRAINT [PK_tblPricing] PRIMARY KEY CLUSTERED 
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =   OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]
CREATE TABLE [dbo].[CAPDer](
[cder_ID] [int] NOT NULL,
[cder_capcode] [char](20) NULL,
[cder_mancode] [int] NULL,
[cder_rancode] [int] NULL,
[cder_modcode] [int] NULL,
[cder_trimcode] [int] NULL,
[cder_name] [varchar](50) NULL,
[cder_introduced] [datetime] NULL,
[cder_discontinued] [datetime] NULL,
[cder_orderno] [int] NULL,
[cder_vehiclesector] [tinyint] NULL,
[cder_doors] [tinyint] NULL,
[cder_drivetrain] [char](1) NULL,
[cder_fueldelivery] [char](1) NULL,
[cder_transmission] [char](1) NULL,
[cder_fueltype] [char](1) NULL,
 CONSTRAINT [PK_CapDer] PRIMARY KEY CLUSTERED 

([cder\u ID]ASC)在[PRIMARY]上具有(PAD\u INDEX=OFF,STATISTICS\u NORECOMPUTE=OFF,IGNORE\u DUP\u KEY=OFF,ALLOW\u ROW\u LOCKS=ON,ALLOW\u PAGE\u LOCKS=ON,FILLFACTOR=90)]

共有1个答案

梁马鲁
2023-03-14

好的,正如我所怀疑的,您似乎没有在删除查询中引用的字段的索引。因此,添加类型capidcder\u中断的索引。

此外,您可能想要尝试AND capid IN(SELECTcder_idfromPUB_CAR. dbo. CapDer WHEREcder_discontinued不是NULL AND DATEDIFF(dd,cder_discontinued, GETDATE())

 类似资料:
  • 问题内容: 我在SQL Server 2008 R2中有一个表,该表包含约400行(几乎没有任何内容)-它在主键(这是一个标识)上具有聚集索引。其他约13个表通过引用完整性(没有级联删除或更新)引用了该表。 插入/更新/获取几乎是即时的-我们正在谈论一瞬间(这应该在意料之中)。但是,使用PK进行删除最多需要3分钟,而我从未见过比1.5分钟更快的时间: 该指数非常分散-90%。我重建并重新组织了该索

  • 本文向大家介绍SQLServer地址搜索性能优化,包括了SQLServer地址搜索性能优化的使用技巧和注意事项,需要的朋友参考一下 这是一个很久以前的例子,现在在整理资料时无意发现,就拿出来再改写分享。 1.需求  1.1 基本需求: 根据输入的地址关键字,搜索出完整的地址路径,耗时要控制在几十毫秒内。  1.2 数据库地址表结构和数据:  表TBAddress    表数据    1.3 例子:

  • 问题内容: 我正在使用简单的xml库:http : //simple.sourceforge.net/home.php 我的@ElementList批注有问题:如果我使用这样的批注: 我的XML文件还有一个属性: 如何删除属性? 问题答案: 该属性告诉Simple 您使用哪种实现。如果缺少,Simple会自己寻找合适的类。 一种解决方案是使用而不是: 现在,简单将不会添加class-Attribu

  • 问题内容: 如果我有JSON对象,请说: 我可以删除“ key1”使其变为: 问题答案: 简单:

  • 删除属性(命令)从模式中删除属性。 它不会从记录中删除属性值,它只是改变模式。 以下语句是命令的基本语法。 以下是有关上述语法中选项的详细信息。 - 定义属性所在的类。 - 指定想要移除的属性。 - 如果在属性上定义了一个或多个索引。 示例 尝试使用以下命令从类中删除属性。 如果上述命令执行成功,您将得到以下输出。

  • 问题内容: 这个问题已经在这里有了答案 : SQL中的TRUNCATE和DELETE有什么区别 (32个答案) TRUNCATE vs DELETE FROM的利弊 (11个答案) 6年前关闭。 关于mysql / sqlserver,我的脑海里发生了一件事,即 删除/截断 哪个更好更快? 在哪里使用删除? 在哪里使用截断? 问题答案: 删除 DELETE是DML命令。 使用行锁执行DELETE语