0

我正在使用 SQL Server CE 4.0 并且DELETE查询性能很差。

我的表中有 300,000 行。

我的查询是:

DELETE from tableX 
where columnName1 = '<some text>' AND columnName2 = '<some other text>'

我在 2 个字段 columnName1 和 columnName2 上使用非聚集索引。

我注意到当要删除的行数很少(比如 < 2000)时,索引可以将性能提高 2-3 倍。但是,当要删除的行数较大(例如 > 15000)时,索引根本没有帮助。

我对这种行为的理论是,当行数很大时,索引维护正在扼杀使用索引(索引查找而不是表扫描)所获得的收益。这个对吗?

不幸的是,我无法摆脱索引,因为它显着有助于非变异查询性能。

此外,我还能做些什么来提高 > 15,000 行案例的删除性能?

我在 Windows 7(32 位)上使用 SQL Server CE 4.0。

我的应用程序是用 C++ 编写的,并使用 OLE DB 接口来操作数据库。

4

1 回答 1

4

有一种被称为“引爆点”的东西,在这种情况下,使用搜索定位单个行的成本是不值得的,而且只执行一次扫描而不是数千次搜索更容易。

您可能会考虑以下几件事来提高性能:

  • 有一个过滤索引,如果这些在 CE 中受支持(老实说我不知道​​)

  • 不是一次删除 15,000 行,而是将删除分批成块

  • 考虑“软删除” - 您只需将active列更新为 0。然后您实际上可以在后台以较小的批次删除行。我的意思是,用户真的会坐在那里积极等待您删除 15,000 多行吗?为什么?

于 2013-11-04T17:46:20.917 回答