1

假设我们有以下表格: r(a, b, c) 其中 a 是某个整数,表格有 50 行 s(d, e, f, a) sa 是 ta 上的外键 每个元组是 400 字节并且 s 是一个多重集,因为这是一个 SQL 数据库。s 拥有大约 100 万个元组。添加表时,数据库服务器会自动在表中的主键列上创建一个索引,例如 t 在 a 上有一个索引。但是,Oracle 不会在作为外键的列上创建索引。所以 s 没有索引。我们想从 t 中删除 15 行。所以这就是我们所做的: 1) 我们从 s 中删除在 t 中具有相同 a 值的行。这需要 10 分钟。2)然后我们运行语句 DELETE FROM t WHERE a IN(我们试图删除的值,确切地说是 15 个)这大约需要 6 个小时。

所以我的猜测是第二步需要很长时间,因为对于 t 中的每个元组,我们将 a 的值与查询列表中的每个值进行比较。那么我们如何优化这个查询以获得相同的结果但更快!?

4

1 回答 1

0

如果您使用联接对于 CRUD 操作将比使用 IN 或子查询更快

例如:

DELETE FROM t 
INNER JOIN S ON t.a = S.a 

希望这可以帮助

于 2012-11-07T10:53:12.983 回答