【发布时间】:2015-03-05 22:02:11
【问题描述】:
我有这两个问题。如您所见,它在 TabRedemption 中查找 orderItemID。选择需要几分之一秒,而更新需要大约 30 秒。
为什么 MySQL 在更新时会使用全索引扫描,我该如何阻止这种情况。它已经有一个外键约束和索引。
select RedemptionID from TabRedemption where orderItemID in
(SELECT OrderItemID FROM TabOrderDetails WHERE OrderId = 4559775);
UPDATE TabRedemption SET active = 1 where orderItemID in
(SELECT OrderItemID FROM TabOrderDetails WHERE OrderId = 4559775);
奇怪的是,如果我手动解决子查询会很快。
UPDATE TabRedemption SET active = 1 where orderItemID in (2579027);
我注意到如果我使用update with join 查询它会很快,但我不想这样做,因为它在 h2database 中不受支持。
附带说明,MS SQLServer 可以做到这一点。
【问题讨论】:
-
你能用 EXPLAIN 和表格定义编辑你的问题吗?
标签: mysql sql indexing query-performance