0

我可以以某种方式强制 mysql 对子查询结果而不是现有表进行全面扫描吗?

假设我有一个查询:

DELETE FROM table_a WHERE id IN (SELECT id FROM table_b WHERE ...)

如果我确定子查询返回约 10 个结果,而 table_a 有数千个结果,我可以以某种方式强制查找 table_a 记录并扫描 table_b 结果吗?Mysql 坚持(根据EXPLAIN SELECT * FROM table_a...)在 table_a 上执行 ALL 并在 table_b 上进行索引查找。

4

2 回答 2

3

相反,您可以在字段上添加索引id并尝试INNER JOIN

DELETE a
FROM table_a a 
     INNER JOIN table_b b
         ON a.id = b.id;
于 2012-08-01T13:26:22.320 回答
1

where someColumn in( ... )与正确连接相比的效率是可怕的。

改为在两个表上使用内部联接。

避免in和其他不能使用索引的子句。

于 2012-08-01T13:29:01.930 回答