检查问题此SELECT查询需要180秒才能完成(检查问题本身的注释).
IN只能与一个值进行比较,但时差仍然很大.
为什么会那样?
鉴于MySQL中的这个SQL查询:
SELECT * FROM tableA WHERE tableA.id IN (SELECT id FROM tableB);
Run Code Online (Sandbox Code Playgroud)
MySQL是否SELECT id FROM tableB为每一行执行多次子查询tableA?
有没有办法让sql更快,而不使用变量或存储过程?
为什么这通常比使用慢LEFT JOIN?
我们在一个表中有超过2000万条记录,并且我们尝试更新3K记录,但是这花费了7分钟以上的时间,并且没有完成,因此终止了查询。
示例查询
UPDATE TABLE_A
SET STATUS = 'PENDING'
WHERE ID IN (
SELECT ID
FROM TMP_TABLE_A_STATUS_FIX
); /*took more than 7 mins and didn't complete even after that*/
Run Code Online (Sandbox Code Playgroud)
我们在临时表TMP_TABLE_A_STATUS_FIX(只有3K记录)中收集了所有需要更新的ID。
由于上述查询花费的时间太长,我们分别进行了如下更新:
UPDATE TABLE_A SET STATUS = 'PENDING' WHERE ID = 1;
UPDATE TABLE_A SET STATUS = 'PENDING' WHERE ID = 2;
UPDATE TABLE_A SET STATUS = 'PENDING' WHERE ID = 3;
.
.
.
UPDATE TABLE_A SET STATUS = 'PENDING' WHERE ID = 2999;
UPDATE TABLE_A SET STATUS = 'PENDING' WHERE …Run Code Online (Sandbox Code Playgroud)