Se eu tiver uma consulta como esta:
SELECT name FROM
(
SELECT * FROM `table`
WHERE id IN (1,40,300)
ORDER BY AnotherColumn
)
Do ponto de vista da largura de banda e sobrecarga, isso é a mesma coisa que fazer três consultas separadas? Ou é significativamente menos sobrecarga?
A quantidade de dados que você deseja pode ser rápida para enviar por fio, mas o que o mysql está fazendo para processá-lo e prepará-lo para transmissão ???
Vamos primeiro olhar para a consulta original
Se id for uma chave primária, isso deve ser rápido. No entanto, você não precisa dizer obter todas as colunas em uma subconsulta e, em seguida, ler o nome dessa subconsulta. Você poderia apenas criar o SQL como
ou melhor ainda, nenhuma subconsulta
Você pode comparar cada um deles e encontrar diferenças nominais insignificantes, mas nada realmente para publicar um whitepaper. Se milhares dessas consultas fossem executadas, um programa de resumo de consulta, como pt-query-digest ou mk-query-digest, poderia facilmente escolher um vencedor sobre quem é o mais rápido em termos de tempo de execução por chamada.
Com relação à sua pergunta original, pense nela nestes termos:
Se ir ao cinema custa US$ 8/pessoa e você tem que trazer três pessoas para ver o filme, qual é o mais barato?
Bem, faça as contas.
Obviamente, 50% a mais de overhead em CASE02.
Se o quebra-cabeça envolvido
Como N vai para o infinito, a sobrecarga média é dobrada.
Chamar três consultas em uma subconsulta ou obter três linhas em uma subconsulta certamente supera três consultas separadas em qualquer dia.
Parece que o MySQL permite ORDER BY em uma subseleção onde não deveria importar, como neste caso. O SELECT externo não tem um ORDER BY, portanto, não há garantia de que os resultados da consulta sejam ordenados.
Quais são as três instruções SELECT que você espera emular, Jakobud? Eu só vejo um:
Na verdade, você esperaria que o otimizador percebesse que apenas name e AnotherColumn são necessários para executar a consulta, mas acho que essa é a questão real aqui: o que o otimizador do MySQL faz quando mostra essa instrução? Isso dependerá de qual mecanismo de armazenamento é usado para Table01 e quais índices estão disponíveis nele. Idealmente, esta consulta tem um índice sobre (id, AnotherColumn, Name) para que a consulta seja naturalmente satisfeita a partir do índice e não precise procurar colunas adicionais na tabela ou executar uma operação de classificação para satisfazer o ORDER BY - - assumindo que o ORDER BY é honrado.