我正在为MCTS 70 - 433做准备,在阅读垃圾堆时,我发现了这个问题。
“任务是分析以下查询的阻塞行为
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
WITH customers
AS (SELECT *
FROM customer),
salestotal
AS (SELECT customerid,
sum(ordertotal) AS Allordertotal
FROM salesorder)
SELECT customerid
我对这两个查询感到很困惑,它们的查询速度不稳定。这是我的两张桌子;
职位表:(id、标题、日期等)日期索引
关系表:(news_id,relation_id)和每个行都有索引
查询A:
SELECT *
FROM posts
WHERE id IN (
SELECT news_id
FROM relationships
WHERE relation_id IN (?)
)
AND status = 1
ORDER BY `date` DESC
查询B:
SELECT *
FROM posts AS p
INNER JOIN relationships AS r ON r
当锁子句出现在子选择中时,锁定的行是子查询返回到外部查询的行。这可能比单独检查子查询所显示的行少,因为来自外部查询的条件可能用于优化子查询的执行。例如,
SELECT * FROM (SELECT * FROM mytable FOR UPDATE) ss WHERE col1 = 5;将只锁定具有col1 = 5的行,即使该条件在子查询中不具有文本性。
有人能帮我理解一下这句话吗?“这可能比检查子查询所显示的行少,因为外部查询的条件可能被用来优化子查询的执行”?
我的理解是“锁定的行是子查询返回到外部查询的行”,所以不管子查询返回什么子查询(在本例中是所有行),这些行必须是锁的?为什