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%。还有其他方法可以优化此查询吗?
求推荐!
如果您不幸拥有一个数据库,其中多个值存储在一个字段中,您有三个选择。
- 修改设计。在单个列中存储多个值是一个禁忌。将值存储在单列和适当的数据类型中。为这些列编制索引,您通常会获得快速的性能。
- 无法修复设计,因为它会太 costly/risky?创建从原始列计算的列。为这些计算列编制索引,您通常会获得快速的性能。
- 如果你到了这一步,你可能有大麻烦了。如果没有可以索引的列,您必须将所有引用包装在函数中以获取查询 joins/where 的值;这将导致 table 扫描和性能不佳。如果您幸运,数据的格式可以按字母顺序排列。
在这种情况下你很幸运。根据示例数据,您应该可以这样做:
DELETE from LSS_FPAVServiceXml
where trackingid LIKE CONVERT(VARCHAR,DATEADD(DAY,-90,GETDATE()),112) + '%'
我正在尝试优化下面的查询,所以我索引了它的主键
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%。还有其他方法可以优化此查询吗?
求推荐!
如果您不幸拥有一个数据库,其中多个值存储在一个字段中,您有三个选择。
- 修改设计。在单个列中存储多个值是一个禁忌。将值存储在单列和适当的数据类型中。为这些列编制索引,您通常会获得快速的性能。
- 无法修复设计,因为它会太 costly/risky?创建从原始列计算的列。为这些计算列编制索引,您通常会获得快速的性能。
- 如果你到了这一步,你可能有大麻烦了。如果没有可以索引的列,您必须将所有引用包装在函数中以获取查询 joins/where 的值;这将导致 table 扫描和性能不佳。如果您幸运,数据的格式可以按字母顺序排列。
在这种情况下你很幸运。根据示例数据,您应该可以这样做:
DELETE from LSS_FPAVServiceXml
where trackingid LIKE CONVERT(VARCHAR,DATEADD(DAY,-90,GETDATE()),112) + '%'