Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Czy sprawdzanie wartości klucza podstawowego przed wstawieniem jest szybsze niż przy użyciu try-catch?

W SQL 2008 możesz po prostu użyć MERGE - znacznie prostszego niż którekolwiek z twoich podejść.

Również nie jestem z tobą na "NIE chcę używać transakcji ze względu na wydajność" - każde wykonywane polecenie DML jest i tak częścią jakiejś transakcji, więc są transakcje, nawet jeśli nie otwierasz ich jawnie. Jeśli masz problemy z wydajnością, możesz opublikować więcej szczegółów, aby uzyskać dodatkową pomoc z wydajnością.

Edycja:Jeśli potrzebujesz naprawdę szybkich wstawek, nie wstawiaj jednego wiersza na raz. Dodaj zestawy wierszy i użyj funkcji MERGE — korzyść, jaką uzyskasz dzięki wstawianiu partii wierszy naraz, powinna znacznie przewyższyć wszelkie drobne ulepszenia, które uzyskasz dzięki optymalizacji szybkości dodawania jednego wiersza.

W każdym razie teoretyczne rozumowanie na temat czegokolwiek związanego z bazami danych zwykle nie jest wystarczająco dobre. Naprawdę musisz przeprowadzić benchmark, aby określić, co jest szybsze. To, co nazywasz „zbędnym zapytaniem o istniejącą linię”, może być całkowicie pomijalne i nie wiesz, czy tak jest, dopóki nie zmierzysz go w realistycznych warunkach.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak SCHEMA_ID() działa w SQL Server

  2. Standardowe ciągi formatu liczbowego obsługiwane przez FORMAT() w SQL Server

  3. Czy istnieje sposób na generowanie skryptów bazy danych na podstawie zapytania SQL w SQL Server?

  4. Używanie dynamicznie nazwanej tabeli w zadaniu przepływu danych SSIS

  5. Jak zaktualizować dwie tabele w jednej instrukcji w SQL Server 2005?