Eu tento atualizar uma tabela contando linhas de outra tabela como
UPDATE t1 SET c1 = (
SELECT COUNT(*) FROM t2 WHERE t2.id=t1.id GROUP BY id
)
estranhamente, essa consulta ficou no Sending data
estado por horas.
SELECT COUNT(*) FROM t2
retorna ~16M em 2 segundos.
SELECT id FROM t2 GROUP BY id
retorna 50 mil linhas em 5 segundos.
As estruturas da tabela são muito simples
CREATE TABLE t2
(
item int(11) unsigned NOT NULL,
id mediumint(7) unsigned NOT NULL,
PRIMARY KEY (item,id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci
Remover correlação:
t2
não tem índice útil. PrecisaINDEX(id)
de uma velocidade muito melhorada.Se você diluiu a tabela e as consultas, essa resposta pode não ser suficiente.