Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Apakah ada hit kinerja yang parah untuk menggunakan Kunci Asing di SQL Server?

Ada hit kinerja kecil pada sisipan, pembaruan dan penghapusan karena FK harus diperiksa. Untuk catatan individu ini biasanya akan sangat kecil sehingga tidak terlalu mencolok kecuali Anda mulai memiliki jumlah FK yang tidak masuk akal yang terkait dengan tabel (Jelas dibutuhkan waktu lebih lama untuk memeriksa 100 tabel selain 2). Ini adalah hal yang baik bukan hal yang buruk karena database tanpa integritas tidak dapat dipercaya dan karenanya tidak berguna. Anda tidak boleh memperdagangkan integritas demi kecepatan. Prestasi tersebut biasanya diimbangi dengan kemampuan yang lebih baik untuk mengoptimalkan rencana eksekusi.

Kami memiliki database berukuran sedang dengan sekitar 9 juta catatan dan FK di mana pun mereka berada dan jarang melihat hit kinerja (kecuali pada satu tabel yang dirancang dengan buruk yang memiliki lebih dari 100 kunci asing, agak lambat untuk menghapus catatan dari ini karena semua harus diperiksa). Hampir setiap dba yang saya tahu tentang siapa yang berurusan dengan database berukuran terabyte yang besar dan kebutuhan nyata akan kinerja tinggi pada kumpulan data besar menuntut batasan kunci asing karena integritas adalah kunci untuk database apa pun. Jika orang-orang dengan database berukuran terabyte mampu membayar kinerja yang sangat kecil, maka Anda juga bisa.

FK tidak diindeks secara otomatis dan jika tidak diindeks, ini dapat menyebabkan masalah kinerja.

Sejujurnya, saya akan mengambil salinan database Anda, menambahkan FK yang diindeks dengan benar dan menunjukkan perbedaan waktu untuk menyisipkan, menghapus, memperbarui, dan memilih dari tabel tersebut dibandingkan dengan yang sama dari database Anda tanpa FK. Tunjukkan bahwa Anda tidak akan menyebabkan hit kinerja. Kemudian tampilkan hasil kueri yang menunjukkan catatan yatim yang tidak lagi memiliki arti karena PK yang terkait dengannya tidak ada lagi. Sangat efektif untuk menunjukkan ini untuk tabel yang berisi informasi keuangan ("Kami memiliki 2.700 pesanan yang tidak dapat kami kaitkan dengan pelanggan" akan membuat manajemen duduk dan memperhatikan).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Fitur Tersembunyi dari SQL Server

  2. Risiko tabrakan UUID menggunakan algoritma yang berbeda

  3. Ingat Ini Saat Memformat Tipe Data WAKTU di SQL Server (T-SQL)

  4. ATN2() Contoh di SQL Server

  5. Apakah mungkin untuk memaksa penguncian tingkat baris di SQL Server?