Lentidão mysql

1 resposta
T

Bom dia a todos, estou fazendo um teste no banco de dados que tenho e coloquei um loop para inserir 5.000.000 de dados, ficou 3 dias rodando e inseriu 1 milhao e 200 +ou-. O banco começou apresentar uma lentidao muito alta, pelo mysql quando eu faço uma consulta aparece no final que foi feita em 20 segundos, aproximadamente (a tabela tem 13 colunas), pelo java, os dados estao aparecendo em uma jtable com uma demora de mais de 5 minutos. É normal essa lentidao apos esse numero de registros?

Segue o codigo da conexao, e da consulta:

public class CriarConexao {

    public static Connection getConexao() throws SQLException {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            return DriverManager.getConnection("jdbc:mysql://localhost/prol", "root", "");
        } catch (ClassNotFoundException e) {
            throw new SQLException(e.getMessage());
        }

    }



}
public ArrayList Select (String Unidade)
	{	
		ArrayList select = new ArrayList();		
		Conectar("select usuario,setor,dataprob,dataresul, probinfo,atendente,tipo, situacao,id from Ocorrencia where unidade = ? order by Setor,Dataprob,id" );
		
		try
		{
			st.setString(1,Unidade);				
			rs=st.executeQuery();
			
		while (rs.next())
		{			
			String [] dados = new String [9];
			
			System.out.println("terminei o select");
			dados[0]=(rs.getString("usuario"));
			dados[1]=(rs.getString("setor"));
			dados[2]=(rs.getString("dataprob"));
			dados[3]=(rs.getString("dataresul"));
			dados[4]=(rs.getString("probinfo"));
			dados[5]=(rs.getString("atendente"));
			dados[6]=(rs.getString("tipo"));
			dados[7]=(rs.getString("situacao"));
			dados[8]=(rs.getString("id"));
		
			
			select.add(dados);
			
		}
		
		
		return null;	
			
		} catch (SQLException e)
		{  
	         imprimeErro("Erro ao buscar Ocorrencia", e.getMessage(), "Select");  
	         return null;  
	    }
		
		
	   }

1 Resposta

E

Em primeiro lugar, 3 dias para inserir 1 milhão e 200 mil linhas é muito tempo, dá uma estudada no método addBatch do PreparedStatement. O melhor desempenho que tive foi usar o addBatch em uma thread, e o ExecuteUpdate em outra thread (sempre verificando a quantidade de batchs na fila para não encher a memória)

No caso do jTable, o que demora não é buscar os dados na tabela, mas sim renderizar eles no jTable. jTable “consome” muita memória e processamento para renderizar, e renderizar 1 milhão de registros não é uma boa ideia, tenta paginar de alguma forma.

Criado 31 de outubro de 2011
Ultima resposta 31 de out. de 2011
Respostas 1
Participantes 2