sql >> Database >  >> RDS >> Sqlserver

Is het controleren van de waarde van de primaire sleutel voordat deze wordt ingevoegd sneller dan het gebruik van try-catch?

Op SQL 2008 kunt u gewoon MERGE gebruiken - veel eenvoudiger dan uw beide benaderingen.

Ook ben ik het niet met u eens over "IK WIL GEEN transacties gebruiken om prestatieredenen" - elke DML-opdracht die u uitvoert, is sowieso een onderdeel van een transactie, dus er zijn transacties, zelfs als u ze niet expliciet opent. Als je prestatieproblemen ondervindt, kun je meer details posten zodat je meer hulp krijgt bij de prestaties.

Bewerken:als je echt snelle invoegingen nodig hebt, voeg dan niet één rij tegelijk in. Voeg sets rijen toe en gebruik MERGE - het voordeel dat u krijgt door batches rijen tegelijk in te voegen, zou veel groter moeten zijn dan eventuele kleine verbeteringen die u krijgt door de snelheid van het toevoegen van één rij te optimaliseren.

Hoe dan ook, theoretisch redeneren over alles wat met databases te maken heeft, is meestal niet goed genoeg. Je moet echt benchmarken om te bepalen wat sneller is. Wat u "onnodig opvragen voor een bestaande lijn" noemt, kan volledig verwaarloosbaar zijn, en u weet niet of dit het geval is totdat u het onder realistische omstandigheden hebt gemeten.



  1. ORA-01461:kan een LONG-waarde alleen binden voor invoegen in een LONG-kolom - Komt voor bij query's

  2. SOLR DataImport-fout kan query niet uitvoeren

  3. Tekst invoegen met enkele aanhalingstekens in PostgreSQL

  4. SQL sluit zich aan bij SQL-subquery's (prestaties)?