Uma das coisas que as pessoas parecem não perceber é que fazer todo o processamento no servidor SQL não é necessariamente bom, independentemente dos efeitos na qualidade do código.
Por exemplo, se você precisar coletar alguns dados e depois computar algo dos dados, armazene-os no banco de dados. Existem duas opções:
- Pegue os dados no seu aplicativo, calcule dentro do seu aplicativo e envie-os de volta ao banco de dados
- Crie um procedimento armazenado ou similar para capturar os dados, calculá-los e armazená-los de uma única chamada para o servidor SQL.
Você pode pensar que a segunda solução é sempre a mais rápida, mas isso definitivamente não é verdade. Estou ignorando, mesmo que o SQL não seja adequado para o problema (por exemplo, manipulação de expressões regulares e expressões regulares). Vamos fingir que você tem o SQL CLR ou algo semelhante para ter uma linguagem poderosa no banco de dados. Se demorar 1 segundo para fazer uma viagem de ida e volta e obter os dados e 1 segundo para armazená-lo, e 10 segundos para fazer o cálculo entre eles. Você está fazendo errado se estiver fazendo tudo no banco de dados.
Claro, você raspa 2 segundos. No entanto, você preferiu desperdiçar 100% de (pelo menos) um núcleo da CPU no servidor de banco de dados por 10 segundos ou preferiu perder esse tempo no servidor da web?
Os servidores da Web são fáceis de expandir, por outro lado, os bancos de dados são extremamente caros, especialmente os bancos de dados SQL. Na maioria das vezes, os servidores da Web também são "sem estado" e podem ser adicionados e removidos por capricho, sem configuração adicional para nada além do balanceador de carga.
Portanto, pense não apenas em reduzir 2 segundos de uma operação, mas também em escalabilidade. Por que desperdiçar um recurso caro, como os recursos do servidor de banco de dados, quando você pode usar os recursos muito mais baratos do servidor da web com um impacto no desempenho relativamente pequeno