Fazer uma consulta de seleção nas linhas a serem excluídas ajuda a executar um desempenho de consulta de exclusão? Por exemplo, se eu fizer isso:
select * from t1 where test_id = x -- will look for 100,000 rows
então execute isso:
delete from t1 where test_id = x
Eu acho que isso ajuda porque a consulta de seleção não colocaria os dados no buffer pool do InnoDB? Não testei porque não sei como testar corretamente.
Em ambos os casos, os dados precisam ser localizados e carregados do disco. Se você faz isso executando um
SELECT
primeiro ou não, é irrelevante.Você está apenas dobrando a quantidade de vezes que a tabela precisa ser bloqueada ao executar o dobro da quantidade de consultas nela, neste caso, portanto, o dobro do trabalho.
Além disso, quase sempre será mais lento executar duas consultas aqui, sendo a primeira uma
SELECT
, por vários motivos. Um dos motivos éSELECT *
que você está dizendo para carregar todas as colunas do disco. Quanto maior a tabela e maior o tamanho dos tipos de dados dessas colunas (e os dados armazenados nelas), mais tempo levará para a execução daSELECT
consulta. Para aDELETE
consulta sozinha, não tem essa mesma quantidade de trabalho.Resposta simples: NÃO
Se parecer mais rápido, é por causa de um cache de consulta. Como alguém disse antes, você basicamente executa a mesma consulta duas vezes e, na segunda vez, extrai os resultados do cache.
Para otimizar esse delete , você precisa de um índice para a coluna test_id .