MYSQL X VELOCIDADE C/ 2.600.000 REGISTROS
é, realmente 2 milhoes de registros é muita coisa, teria que mudar
para um banco de dados mais robusto tipo sql-server ou oracle, apesar de que o mysql é bem rapido em consultas, mas nunca vi ele rodar com uma tabela de 2 milhoes de registro nao, agora 12 segundos nao acho muito tempo para ler 2,5 milhoes de registros nao, o que vc pode fazer é parametrizar sua consulta, mas, vc disse que tem que trazer todos os registro, se vc nao tiver indice na tabela pode-se criar um indice que melhora muito, agora se ja tiver indice, infelizmente nao tem como fazer muita coisa nao.
para um banco de dados mais robusto tipo sql-server ou oracle, apesar de que o mysql é bem rapido em consultas, mas nunca vi ele rodar com uma tabela de 2 milhoes de registro nao, agora 12 segundos nao acho muito tempo para ler 2,5 milhoes de registros nao, o que vc pode fazer é parametrizar sua consulta, mas, vc disse que tem que trazer todos os registro, se vc nao tiver indice na tabela pode-se criar um indice que melhora muito, agora se ja tiver indice, infelizmente nao tem como fazer muita coisa nao.
Eu considero quase como o select perfeito, da uma olhada:
Esse é a versão 1 da select, ainda melhorei ela bruscamente...Fico nota 10
strSQL = _
"SHAPE" & vbCrLf & _
"{SELECT" & vbCrLf & _
"arq_Pedidos.id_Pedido," & vbCrLf & _
"arq_Pedidos.id_Status," & vbCrLf & _
"arq_Pedidos.id_Empresa," & vbCrLf & _
"arq_Pedidos.id_Cliente," & vbCrLf & _
"arq_Pedidos.id_Vendedor," & vbCrLf & _
"arq_Pedidos.id_Natureza," & vbCrLf & _
"arq_Pedidos.id_Condicao," & vbCrLf & _
"arq_Pedidos.id_Embalagem," & vbCrLf & _
"arq_Pedidos.Data_Criacao," & vbCrLf & _
"arq_Pedidos.Data_Pedido," & vbCrLf & _
"arq_Pedidos.Data_Faturamento," & vbCrLf & _
"arq_Pedidos.Estoque," & vbCrLf & _
"arq_Pedidos.Quantidade," & vbCrLf & _
"arq_Pedidos.Peso," & vbCrLf & _
"arq_PedidosNotas.id_Pedido_Nota," & vbCrLf
strSQL = strSQL & _
"(SELECT" & vbCrLf & _
"SUM(arq_PedidosItens.Quantidade * arq_PedidosItens.Preco_Unitario)" & vbCrLf & _
"FROM" & vbCrLf & _
"arq_PedidosItens" & vbCrLf & _
"WHERE" & vbCrLf & _
"arq_PedidosItens.id_Pedido = arq_Pedidos.id_Pedido)" & vbCrLf & _
"AS xValorTotal" & vbCrLf
strSQL = strSQL & _
"FROM" & vbCrLf & _
"arq_Pedidos" & vbCrLf & _
"LEFT OUTER JOIN" & vbCrLf & _
"arq_PedidosNotas" & vbCrLf & _
"ON" & vbCrLf & _
"arq_Pedidos.id_Pedido = arq_PedidosNotas.id_Pedido" & vbCrLf
strSQL = strSQL & _
"WHERE" & vbCrLf & _
"(arq_Pedidos.data_pedido" & vbCrLf & _
"BETWEEN '" & vbCrLf & _
Format(fMainForm.strPerInicial, "yyyy/MM/dd 00:00:00") & "'" & vbCrLf & _
"AND '" & vbCrLf & _
Format(fMainForm.strPerFinal, "yyyy/MM/dd 23:59:59") & "')} AS cmbCabec" & vbCrLf
strSQL = strSQL & _
"APPEND" & vbCrLf & _
"({SELECT" & vbCrLf & _
"@Sequencia := @Sequencia + 1 AS Sequencia," & vbCrLf & _
"arq_PedidosItens.id_Pedido_item," & vbCrLf & _
"arq_PedidosItens.id_Pedido," & vbCrLf & _
"arq_PedidosItens.id_Produto," & vbCrLf & _
"arq_PedidosItens.id_Produto_NF," & vbCrLf & _
"arq_PedidosItens.Preco_Unitario," & vbCrLf & _
"arq_PedidosItens.Quantidade," & vbCrLf & _
"(arq_PedidosItens.Preco_Unitario * arq_PedidosItens.Quantidade) AS xTotal," & vbCrLf & _
"arq_PedidosItens.ICMS," & vbCrLf & _
"arq_PedidosItens.ICMS_Incidencia," & vbCrLf & _
"arq_PedidosItens.IPI," & vbCrLf & _
"arq_PedidosItens.ISS" & vbCrLf
strSQL = strSQL & _
"FROM" & vbCrLf & _
"(SELECT @Sequencia := 0) Seq," & vbCrLf & _
"arq_PedidosItens" & vbCrLf & _
"WHERE" & vbCrLf & _
"arq_PedidosItens.id_Pedido = ?}" & vbCrLf & _
"RELATE id_Pedido TO PARAMETER 0) AS cmdItem,"
strSQL = strSQL & _
"({SELECT" & vbCrLf & _
"arq_PedidosVenctos.id_pedido_vencimento," & vbCrLf & _
"arq_PedidosVenctos.id_pedido," & vbCrLf & _
"CONCAT((@Parcela := @Parcela + 1),'a.') AS Parcela," & vbCrLf & _
"arq_PedidosVenctos.percentual," & vbCrLf & _
"arq_PedidosVenctos.valor," & vbCrLf & _
"arq_PedidosVenctos.Data" & vbCrLf
strSQL = strSQL & _
"FROM" & vbCrLf & _
"(SELECT @Parcela := 0) Parc," & vbCrLf & _
"arq_PedidosVenctos" & vbCrLf & _
"WHERE" & vbCrLf & _
"arq_PedidosVenctos.id_Pedido = ?}" & vbCrLf & _
"RELATE id_Pedido TO PARAMETER 0) AS cmdPagto"
Esse é a versão 1 da select, ainda melhorei ela bruscamente...Fico nota 10
Tópico encerrado , respostas não são mais permitidas