Considere uma consulta simples:
Select username,usertype from Table1 Where usertype='Manager'
Provavelmente, o DBMS executará a seleção primeiro e, em seguida, a projeção, ou seja, primeiro retirando as linhas da Tabela1 com usertype = 'Manager'
Existe um caso em que a execução dos projetos primeiro e depois a seleção seria mais ideal ou melhor em qualquer meio?
Não com armazenamento orientado a linha, onde os valores da coluna são armazenados juntos por linhas, o que não é ideal para começar com projeção.
Digamos que Table1 tenha 30 colunas, mas você precisa de dados apenas de 2 (nome de usuário, tipo de usuário). Se as colunas de nome de usuário e tipo de usuário não forem indexadas, o DBMS deverá ler a tabela completa com todas as linhas (portanto, ler todas as colunas). Nesse caso, a única ordem para fazer isso é a seleção e depois a projeção.
Se o nome de usuário e o tipo de usuário fizerem parte de um índice composto, o DBMS decidirá obter os dados desse índice em vez de ler a tabela inteira. O índice provavelmente terá menos colunas que a tabela, mas ainda não é a projeção que você está procurando. Os índices ainda são organizados para armazenamento orientado a linha, a primeira seleção ocorre com base em usertype='Manager', depois a projeção.
No entanto, existem alguns outros DBMSs que usam armazenamento orientado a colunas. SGBD orientado a colunas . Nesses sistemas, colunas inteiras são armazenadas uma após a outra, o que facilita muito o início da projeção. Se você precisar de apenas 2 colunas de 30, o banco de dados pode simplesmente ler essas 2 colunas e fazer a seleção. Esse tipo de sistema funciona melhor ao executar consultas de baixa seletividade, que desejam acessar a maioria ou todas as linhas de uma tabela . O desempenho geral depende do tipo de carga de trabalho.