Mysql
 sql >> база данни >  >> RDS >> Mysql

Актуализиране на няколко реда от една таблица

Ако всеки ред трябва да получи различна стойност, която не може да бъде извлечена от съществуващите данни в базата данни, не можете да направите много, за да оптимизирате общата сложност. Така че не очаквайте твърде много чудеса.

Въпреки това трябва да започнете да използвате подготвени оператори и пакетиране:

public void updateRank(Map<Integer,Double> map){
    Iterator<Entry<Integer, Double>> it = map.entrySet().iterator();
    String query = "";
    int i = 0;

    Connection connection = getConnection(); // get the DB connection from somewhere
    PreparedStatement stmt = connection.prepareStatement("update profile set rank = ? where profileId = ?");

    while (it.hasNext()) {
        Map.Entry<Integer,Double> pairs = (Map.Entry<Integer,Double>)it.next();
        stmt.setInt(1, pairs.getValue());
        stmt.setDouble(2, pairs.getKey());
        stmt.addBatch(); // this will just collect the data values
        it.remove();
    }       
    stmt.executeBatch(); // this will actually execute the updates all in one
}

Какво прави това:

  1. подготвеният оператор кара SQL анализатора да анализира SQL само веднъж
  2. пакетирането минимизира пътуванията клиент-сървър, така че не едно за всяка актуализация.
  3. комуникацията между клиент и сървър е сведена до минимум, тъй като SQL се предава само веднъж и данните се събират и изпращат като пакет (или поне по-малко пакети)

В допълнение:

  • Моля, проверете дали колоната на базата данни profileId използва индекс, така че търсенето на съответния ред е достатъчно бързо
  • Можете да проверите дали връзката ви е настроена на автоматично завършване. Ако е така, опитайте да деактивирате автоматичното извършване и изрично да завържете транзакцията, след като всички редове бъдат актуализирани. По този начин операциите за единична актуализация също могат да бъдат по-бързи.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. оптимизиране на заявка с datediff() в mysql

  2. Получаване на група по сума и обща сума в една заявка

  3. Вмъкване и избор на UUID като двоични (16)

  4. Как да активирам explicit_defaults_for_timestamp?

  5. използване на GROUP BY в mysql 8