Isto depende de alguns fatores...
Na primeira consulta, você está acessando
toda a sua tabela apenas uma vez, ordenando os resultados e retornando o primeiro registro.
Na segunda cosulta, você está lendo a mesma tabela duas vezes. Uma para buscar a maior data da tabela, e outra para buscar os registros que possuam esta data.
O fator principal, em condições normais, é:
* Existe um índice em sua tabela sobre o campo_b?
Caso não exista:
- A primeira query terá o trabalho de ler a tabela inteira, ordená-la, e retornar o primeiro registro que encontrar. Neste caso, é o melhor que se pode fazer...
- Já a segunda query irá realizar um full scan na tabela para encontrar o maior valor do campo_b. Em seguida, será realizado um novo full scan nesta mesma tabela, para encontrar os registros que possuam o campo_b igual ao valor encontrado (como o campo_b não está indexado, este segundo full scan irá ocorrer sem dúvidas).
Agora, caso exista um índice sobre o campo_b (e que ele esteja sendo usado pelo otimizador, claro):
- A primeira query irá continuar realizando o mesmo processo. Pode ser que no lugar de um full table scan o otimizador opte por realizar um index full scan sobre o índice (isto dependeria do otimizador, das estatísticas de usa tabela, e as colunas retornadas pela query interna também devem fazer parte do índice - eu já li a respeito disso várias vezes, mas sinceramente não me lembro até hoje de ter visto um plano de execução seguindo este caminho...), embora ambos podem ser bem demorados, especialmente em uma tabela com muitos registros (não nos esquecendo do custo para ordenar os registros, após recuperá-los).
- A segunda query, no entanto, se sairia muito melhor nestas condições. Neste caso, a consulta provavelmente iria realizar um index full scan (min/max) sobre o índice, para recuperar o maior valor contido. Uma vez obtido este valor, o índice é acessado novamente para que os registros contendo este valor possam ser retornados.
Isto, é claro, assumindo que o campo_b não pode possuir valores repetidos, ou que o campo possua poucas repetições.
Caso o campo_b possa assumir poucos valores distintos, e com muitas repetições (digamos que seu campo_b seja o campo 'ESTADO' de sua tabela de clientes com alguns milhões de registros), um índice sobre o campo poderia prejudicar muito a performance se comparado com os resultados obtidos pela mesma consulta na primiera situação.
Enfim:
Depende, e muito... (agora no fim do texto percebi que escrevi e escreve não ajudei em nada..
)
Cada caso é um caso, e infelizemente não existe uma regra simples a seguir.
Uma dica é sempre analizar o plano de execução gerado pelas suas queries (para isto, um bom conhecimento das tabelas sendo analisadas é fundamental), comparando-o com o plano gerado por outras formas de escrever a mesma consulta, ate achar a consulta "ideal" para o seu caso.