Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

स्लीक 3.0 बल्क इंसर्ट या अपडेट (अप्सर्ट)

ऐसे कई तरीके हैं जिनसे आप इस कोड को तेज़ बना सकते हैं (प्रत्येक को चाहिए पिछले वाले की तुलना में तेज़ हो, लेकिन यह उत्तरोत्तर कम मुहावरेदार-चालाक हो जाता है):

  • insertOrUpdateAll Run चलाएं insertOrUpdate . के बजाय अगर स्लीक-पीजी पर 0.16.1+

    await(run(TableQuery[FooTable].insertOrUpdateAll rows)).sum
    
  • अगली बार चलाने से पहले हर एक के प्रतिबद्ध होने की प्रतीक्षा करने के बजाय, अपने DBIO ईवेंट को एक साथ चलाएं:

    val toBeInserted = rows.map { row => TableQuery[FooTable].insertOrUpdate(row) }
    val inOneGo = DBIO.sequence(toBeInserted)
    val dbioFuture = run(inOneGo)
    // Optionally, you can add a `.transactionally`
    // and / or `.withPinnedSession` here to pin all of these upserts
    // to the same transaction / connection
    // which *may* get you a little more speed:
    // val dbioFuture = run(inOneGo.transactionally)
    val rowsInserted = await(dbioFuture).sum
    
  • JDBC स्तर तक ड्रॉप डाउन करें और अपने अप्सर्ट को एक ही बार में चलाएं (इस उत्तर के माध्यम से विचार ):

    val SQL = """INSERT INTO table (a,b,c) VALUES (?, ?, ?)
    ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);"""
    
    SimpleDBIO[List[Int]] { session =>
      val statement = session.connection.prepareStatement(SQL)
      rows.map { row =>
        statement.setInt(1, row.a)
        statement.setInt(2, row.b)
        statement.setInt(3, row.c)
        statement.addBatch()
      }
      statement.executeBatch()
    }
    


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:एंबेडेड JSON बनाम टेबल

  2. MySQL क्वेरी उन ग्राहकों को खोजने के लिए जिन्होंने दो विशिष्ट उत्पादों का आदेश दिया है

  3. MySQL डेटाबेस से कैसे कनेक्ट करें

  4. MySQL - खंड से सबक्वायरी का उपयोग करके दृश्य बनाएं

  5. व्युत्पन्न तालिका से कॉलम खींचें और उन्हें एक MySQL चयन कथन में जोड़ दें