SQL 删除查询的查询优化

SQL Query optimization for delete query

我正在尝试优化下面的查询,所以我索引了它的主键

DELETE from LSS_FPAVServiceXml 
WHERE CONVERT(datetime, LEFT(trackingid, 8)) < CAST(CONVERT(CHAR(10), GETDATE() - 90, 101) AS SMALLDATETIME)

trackingid 的索引代码是:

ALTER TABLE [dbo].[LSS_FPAVServiceXml] 
    ADD CONSTRAINT [PK_LSS_FPAVRequest] 
    PRIMARY KEY CLUSTERED ([trackingid] ASC)

之后执行计划成本:73%。还有其他方法可以优化此查询吗?

求推荐!

如果您不幸拥有一个数据库,其中多个值存储在一个字段中,您有三个选择。

  1. 修改设计。在单个列中存储多个值是一个禁忌。将值存储在单列和适当的数据类型中。为这些列编制索引,您通常会获得快速的性能。
  2. 无法修复设计,因为它会太 costly/risky?创建从原始列计算的列。为这些计算列编制索引,您通常会获得快速的性能。
  3. 如果你到了这一步,你可能有大麻烦了。如果没有可以索引的列,您必须将所有引用包装在函数中以获取查询 joins/where 的值;这将导致 table 扫描和性能不佳。如果您幸运,数据的格式可以按字母顺序排列。

在这种情况下你很幸运。根据示例数据,您应该可以这样做:

DELETE from LSS_FPAVServiceXml 
where trackingid LIKE CONVERT(VARCHAR,DATEADD(DAY,-90,GETDATE()),112) + '%'