SELECT LENTO

ALTAIR148 13/10/2016 00:06:06
#468028
Boa noite, tenho o select abaixo:


SELECT
'Extent3'.'ID_PESSOA',
'Extent2'.'DT_ACORDO',
'Extent2'.'AN_ACORDO_COM_ENTRADA',
'Extent2'.'AN_SITUACAO_ACORDO',
'Extent1'.'DT_INCLUSAO',
'Extent2'.'NR_ACORDO_BANCO',
'Extent1'.'NR_PARCELA',
'Extent1'.'VL_PARCELA',
'Extent1'.'DT_VCTO',
'Extent1'.'PERC_HONO',
'Extent1'.'VL_HONORARIO',
'Extent1'.'DT_PAGTO',
'Extent1'.'VL_HONORARIO_PAGO',
'Extent2'.'NR_OPERACAO',
'Extent2'.'VLR_SALDO_DEVEDOR',
'Extent2'.'VLR_HONO',
'Extent1'.'DT_APROVACAO',
'Extent1'.'DT_EMISSAO_NF',
'Extent1'.'NR_RECIBO',
'Extent3'.'NM_PESSOA',
'Extent3'.'CPF_CNPJ',
'Extent1'.'HO_DEVIDO',
'Extent1'.'DT_PAGTO_NF',
'Extent2'.'NR_DOSSIE',
'Extent1'.'AN_OBSERVACAO',
'Extent1'.'AN_ALEGA_PAGTO',
'Extent1'.'AN_OBSERVACAO_ALEGA',
'Extent1'.'AN_USUARIO_ALTERACAO'
FROM 'tab_chave_acordo' AS 'Extent2' INNER JOIN 'tab_acordo' AS 'Extent1' ON 'Extent1'.'NR_ACORDO_BANCO' = 'Extent2'.'NR_ACORDO_BANCO' INNER JOIN 'tab_pessoa' AS 'Extent3' ON 'Extent2'.'ID_PESSOA'= 'Extent3'.'ID_PESSOA'
where DT_VCTO >= [ô]2016-01-01[ô] and DT_VCTO <= [ô]2016-10-01[ô] AND DT_PAGTO IS NOT NULL AND NR_RECIBO IS NOT NULL



Estou migrando minha base para o MYSQL, devido exigencia do cliente que não quer usar o SQLSERVER EXPRESS. Este select no sqlserver leva 1 segundo, já no mysql ele leva cerca de 15 segundos. Alguma coisa nele que pode ser otimizado?
Lembrando que as tabelas:

tb_acordo : 158 mil registros
tb_pessoa 2.500 registros
tb_chave_acordo : 7;500 registros;

Não entendo a tamanha diferença da velocidade entre um banco e outro, o que poderia ser? Lembrando que os dois estão com a mesma estutura de dados e rodando na mesma máquina.
DS2T 13/10/2016 08:45:18
#468035
Resposta escolhida
é possível que essa diferença se dê por causa da camada de otimização do SQL Server. Não sei como funciona no MySQL, porque trabalhei pouco tempo com ele...
Além disso, quando você cria uma chave primária no SQL Server, automaticamente ele gera um índice clusterizado baseado nela (até onde sei, é uma peculiaridade do SQL Server). Talvez a diferença esteja aí.
Dá uma olhada nos índices, vê se tem algo no SQL Server que não tem no MySQL.

Abraços!
MOUSER 13/10/2016 08:46:24
#468036
Isso ocorre no script query do proprio mysql ou no seu sistema?
ALTAIR148 13/10/2016 08:49:24
#468037
Citação:

:
Isso ocorre no script query do proprio mysql ou no seu sistema?



Ocorre direto no mysql mesmo, no sistema dá o mesmo tempo
MOUSER 13/10/2016 08:50:44
#468039
Citação:

é possível que essa diferença se dê por causa da camada de otimização do SQL Server. Não sei como funciona no MySQL, porque trabalhei pouco tempo com ele...
Além disso, quando você cria uma chave primária no SQL Server, automaticamente ele gera um índice clusterizado baseado nela (até onde sei, é uma peculiaridade do SQL Server). Talvez a diferença esteja aí.
Dá uma olhada nos índices, vê se tem algo no SQL Server que não tem no MySQL.



Fiz essa pergunta já pensando no que nosso amigo DS2T disse. Se for no sistema a lentidão eu recomendaria re-criar o tambor e transferir os dados de um para o outro. Isso daria um pouco de trabalho pois teria que só mudar no nome do tambor na classe de conexão.
MOUSER 13/10/2016 08:56:56
#468040
é como nosso amigo disse, o metodo de otimização do SQL Server e do MySql é diferente, mas se em ambos o sistema entrega uma velocidade aceitavel (rapido), tranquilo em relação ao cliente pois não irá sofrer. Já a manutenção, recomendo fazer na maquina que está o SQL Server e depois aplicar o Update na maquina que está o MySql, já que causa essa lentidão no select na manutenção.
ALTAIR148 13/10/2016 09:06:46
#468041
Citação:

:
é como nosso amigo disse, o metodo de otimização do SQL Server e do MySql é diferente, mas se em ambos o sistema entrega uma velocidade aceitavel (rapido), tranquilo em relação ao cliente pois não irá sofrer. Já a manutenção, recomendo fazer na maquina que está o SQL Server e depois aplicar o Update na maquina que está o MySql, já que causa essa lentidão no select na manutenção.



O problema de tudo é que se eu aumentar o período de data, a consulta chega até 10 minutos, o cliente não vai ficar esperando 10 minutos um relatório. Estou completamente perdido, testei o Postgree e nele ficou mais lento ainda.
DS2T 13/10/2016 09:34:19
#468043
Citação:

O problema de tudo é que se eu aumentar o período de data, a consulta chega até 10 minutos, o cliente não vai ficar esperando 10 minutos um relatório. Estou completamente perdido, testei o Postgree e nele ficou mais lento ainda.




Cara, há algo de podre no reino da Dinamarca.
10 minutos pra essa quantidade de dados?!

Já tentou executar direto de uma IDE como MySQL Front, Navicat, etc? Lá demora esse absurdo de tempo também?

Faça os testes:
Rode a consulta direto de uma IDE do MySQL. Deu ruim do mesmo jeito? Vá para a próxima linha.
Verifique se não fizeram nada de errado com os índices da tabela (em cada uma das tabelas)... Índices ajudam demais, mas se você criar errado... Vai ter umas árvores B que vão cagar suas consultas todas.
ALTAIR148 13/10/2016 09:48:50
#468044
Citação:

:
O problema de tudo é que se eu aumentar o período de data, a consulta chega até 10 minutos, o cliente não vai ficar esperando 10 minutos um relatório. Estou completamente perdido, testei o Postgree e nele ficou mais lento ainda.


Cara, há algo de podre no reino da Dinamarca.
10 minutos pra essa quantidade de dados?!

Já tentou executar direto de uma IDE como MySQL Front, Navicat, etc? Lá demora esse absurdo de tempo também?

Faça os testes:
Rode a consulta direto de uma IDE do MySQL. Deu ruim do mesmo jeito? Vá para a próxima linha.
Verifique se não fizeram nada de errado com os índices da tabela (em cada uma das tabelas)... Índices ajudam demais, mas se você criar errado... Vai ter umas árvores B que vão cagar suas consultas todas.


.
Cara, era os indices mesmo.... Não tava usando Foreign Key, para relacionar os campos das tabelas, dai fiz aqui e cai dratiscamente o tempo, agora tá voando as consultas. Valeu ai pessoal.
Tópico encerrado , respostas não são mais permitidas