有条件地删除 SQL 行
Posted
技术标签:
【中文标题】有条件地删除 SQL 行【英文标题】:Conditionally delete SQL rows 【发布时间】:2013-03-13 14:35:08 【问题描述】:在 Windows Phone 7.1 上使用 Linq 2 SQL CE,如何触发“DELETE FROM table_name WHERE some_column=some_value”SQL 命令?
不幸的是,即使在将“最大缓冲区大小”参数增加到 1024 之后,使用 Table.DeleteAllOnSubmit() 方法擦除项目的速度也非常慢:stupud Linq 会反序列化每条记录,因此 DataContext.SubmitChanges() 方法永远不会返回。
【问题讨论】:
【参考方案1】:您无法触发所需的 DELETE 语句,但可以这样做:
使用 .Take(100) 仅 fetech 并在每个 SubmitChanges() 调用中删除一组记录,并循环运行,直到不再返回任何行。
使用 rowversion 列加快删除速度,在我的测试中从 320 毫秒到 70 毫秒以下 - 请参阅 http://erikej.blogspot.dk/2012/04/windows-phone-local-database-tip.html
【讨论】:
不幸的是,我有一个覆盖主索引列的二级索引。我会删除它,但是 Microsoft 的 DatabaseSchemaUpdater 没有用于从我的表中删除索引的 API :-( 但是你仍然可以使用 Take.. !? 是的 - 我会尽快尝试。非常感谢您的帮助。 Take() 将删除速度减慢了约 9%,以下是数据: 一次性:97 秒内 2033 个条目,58 秒内 1214 个条目 通过获取 128 条记录:2033 个条目105 秒,64.7 秒内 1214 个条目 2033 个条目在 14 秒内,1208 个条目在 3.98 秒内 - 好多了 :-) 非常感谢!顺便说一句,为了升级架构,我刚刚重命名了数据库文件。以上是关于有条件地删除 SQL 行的主要内容,如果未能解决你的问题,请参考以下文章