我有一张表有超过3.8亿条记录。我有一个存储过程:
总程序大约需要30分钟才能执行。超出此DELETE
需要28分钟。
删除是一个简单的陈述,有以下几点:
Delete a where condition_1 AND condition_2 AND condition_3
有人能帮助我吗?
答案 0 :(得分:8)
你的桌子是如何组织的?您拥有什么聚集索引以及您拥有哪些非聚集索引?那三个条件究竟是什么?
DELETE的行为与SELECT非常相似,因为它需要查找符合删除条件的行。为此,它将使用与SELECT相同的技术,如果您的condition_1,condition_2和condition_3没有覆盖索引,它们将触发一个表扫描,该扫描将按数据大小计时(380M)
答案 1 :(得分:2)
条件太大了吗? 也许使用索引可以帮助更快地删除。
或者,您可以使用truncate而不是delete。
CREATE [UNIQUE] INDEX indexName
ON table
(fieldName [ASC/DESC], ...)
选项ASC / DESC可以定义订单
答案 2 :(得分:2)
首先看一下你的indexing和查询..首先应该不考虑28 mins
吗?
可能值得一看database tuning和query optimization ...也许你也可以尝试逐步删除记录......有些建议here ..
答案 3 :(得分:0)
索引条件中的字段可能会有所帮助。如果您创建要删除的行的视图,需要多长时间?如果您可以加快视图速度,则可以加快删除速度。