sql >> データベース >  >> RDS >> Oracle

OracleDataAdapter.Fill()が非常に遅いのはなぜですか?

    このコードは私を助けてくれました、試してみてください:

    using (OracleConnection conn = new OracleConnection())
    {
         OracleCommand comm = new OracleCommand();
         comm.Connection = conn;
         comm.FetchSize = comm.FetchSize * 16;
         comm.CommandText = "select * from some_table";
    
         try
         {
              conn.Open();
              OracleDataAdapter adap = new OracleDataAdapter(comm);
              System.Data.DataTable dt = new System.Data.DataTable();
              adap.Fill(dt);
         }
         finally
         {
              conn.Close();
         }
    }
    

    トリックは一列に並んでいます(あなたのケースに最適なものを見つけるために8から64までの値を試してください):

    comm.FetchSize = comm.FetchSize * 16;
    

    更新:

    改善されたコードは次のとおりです。

    OracleConnection myConnection = new OracleConnection(myConnectionString);
    OracleCommand myCommand = new OracleCommand(mySelectQuery, myConnection);
    myConnection.Open();
    using (OracleDataReader reader = myCommand.ExecuteReader(CommandBehavior.CloseConnection))
    {
        // here goes the trick
        // lets get 1000 rows on each round trip
        reader.FetchSize = reader.RowSize * 1000;
    
        while (reader.Read())
        {
            // reads the records normally
        }
    }// close and dispose stuff here
    

    こちら から



    1. MySQLの文字エンコードの変更。データの整合性は維持されていますか?

    2. MYSQL現在までの営業日を追加

    3. bashからMySQLクエリを実行しているときに、影響を受ける行数を取得するにはどうすればよいですか?

    4. SQLAlchemyを使用して、selectステートメントの列としてサブクエリを使用してSQLを生成します