gpt4 book ai didi

sql - 使用/JOIN 查询更快地删除

转载 作者:行者123 更新时间:2023-12-02 19:23:49 26 4
gpt4 key购买 nike

我在 Oracle 10g 中有这个查询:

 DELETE FROM "BMAN_TP1"."CELLS_ITEM" TABLE1
WHERE EXISTS (
SELECT "CELLS_ITEM".*
FROM "BMAN_TP1"."CELLS_ITEM"
INNER JOIN "BMAN_TP1"."CELLS" ON ("CELLS_ITEM"."SET_ID"="CELLS"."SET_ID") AND ("CELLS_ITEM"."META_CELL_ID"="CELLS"."META_CELL_ID")
INNER JOIN "BMAN_TP1"."META_CELLS" ON ("CELLS"."META_CELL_ID"="META_CELLS"."META_CELL_ID")
WHERE ("META_CELLS"."UDA_ID" = variable)
AND (TABLE1."SET_ID" = "CELLS_ITEM"."SET_ID")
AND (TABLE1."META_CELL_ID" = "CELLS_ITEM"."META_CELL_ID")
)

目前删除 50K 条记录需要大约 10 秒(表中大约有 100K 条记录)

我知道它会重复 100K 次选择查询,这会大大减慢速度。
而且TABLE1有两个字段PK,这使得事情变得更加复杂。

有什么办法可以让它更快吗?

编辑:

尝试过这个,但花费的时间几乎相同:

DELETE FROM "BMAN_TP1"."CELLS_ITEM" TABLE1
WHERE EXISTS (
SELECT "META_CELL_ID"
FROM "BMAN_TP1"."META_CELLS"
WHERE ("META_CELLS"."UDA_ID"=55823)
AND (TABLE1."META_CELL_ID" = "META_CELLS"."META_CELL_ID")
)

最佳答案

如果不知道您的架构,就很难判断,但在子查询中使用要删除的表似乎毫无用处。我会写:

DELETE FROM BMAN_TP1.CELLS_ITEM TABLE1
WHERE EXISTS (
SELECT CELLS.META_CELL_ID
FROM BMAN_TP1.CELLS
INNER JOIN BMAN_TP1.META_CELLS ON (CELLS.META_CELL_ID=META_CELLS.META_CELL_ID)
WHERE (META_CELLS.UDA_ID = variable)
AND (TABLE1.SET_ID = CELLS_ITEM.SET_ID)
AND (TABLE1.META_CELL_ID = CELLS_ITEM.META_CELL_ID)
)

编辑:以上内容现已过时,因为您修改了 DELETE 语句。请忽略它。

但另一个想法是:如果 CELLS_ITEM 上定义了触发器,您可以尝试禁用它们。他们可以长时间咀嚼更大的删除,这是我的第一手资料。

关于sql - 使用/JOIN 查询更快地删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10814745/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com