Diferenças de performance entre SSCE 2.0 e 3.1 para a mesma instrução

Ao converter uma aplicação de .NET CF 1.0 com base de dados em SQL CE 2.0 para .NET CF 2.0 com SQL CE 3.1, constatei que uma instrução SQL que demorava poucos segundos, passou a demorar quase 30 segundos a ser executada!

A instrução em causa relacionava 3 tabelas, e estava ‘optimizada’ para SSCE 2.0, ou seja, em vez de JOINs explícitos, relacionava as tabelas na cláusula WHERE, algo como…

SELECT t1.c1, t1.c2
FROM t1, t2, t3
WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1

Bastou mudá-la para…

SELECT t1.c1, t1.c2
FROM t1 LEFT JOIN t2 ON t1.c1 = t2.c1 LEFT JOIN  t3 ON t2.c1 = t3.c1

…para que de quase 30 segundos passasse a ser executada em menos de 5 segundos!

Quem não utilizou SSCE 2.0, logo à partida escolheria esta segunda instrução, mas para os restantes, ao converterem aplicações em .NET CF 1.0 para .NET CF 2.0 vale a pena reverem as V/ instruções SELECT no sentido de procederem a esta modificação!

3 thoughts on “Diferenças de performance entre SSCE 2.0 e 3.1 para a mesma instrução”

  1. olá Alberto,
    por acaso acontece-me o mesmo nalgumas queries mas em WinForms com o SQL Express. Existe alguma ferramenta que nos facilita a optimização das queries ou só mesmo testando as mais criticas e comparamos o tempo que demora cada uma.

  2. O meu comentário saíu com a pontuação errada. :) É mesmo uma grande dica! Daquelas que se anda a questionar durante horas\dias, para depois se aperceber que que era algo simples…

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>