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

Kerangka Entitas Mengindeks SEMUA kolom kunci asing

Di EF Code First, alasan umum mengapa Anda memodelkan hubungan kunci asing adalah untuk navigasi antar entitas. Pertimbangkan skenario sederhana Country dan City , dengan pemuatan bersemangat yang ditentukan untuk pernyataan LINQ berikut:

var someQuery = 
   db.Countries
     .Include(co => co.City)
     .Where(co => co.Name == "Japan")
     .Select(...);

Ini akan menghasilkan kueri sepanjang baris:

SELECT *
FROM Country co
INNER JOIN City ci
  ON ci.CountryId = co.ID
WHERE co.Name = 'Japan';

Tanpa Indeks pada kunci asing di City.CountryId , SQL perlu memindai tabel Kota untuk memfilter kota untuk Negara selama GABUNG.

Indeks FK juga akan memiliki manfaat kinerja jika baris dihapus dari tabel Negara induk, karena integritas referensial perlu mendeteksi keberadaan setiap baris Kota yang ditautkan (apakah FK memiliki ON CASCADE DELETE ditentukan atau tidak).

TL;DR

Indeks pada Kunci Asing adalah disarankan , bahkan jika Anda tidak memfilter secara langsung pada kunci asing, itu akan tetap diperlukan di Gabung. Pengecualian untuk ini tampaknya cukup dibuat-buat:

  • Jika selektivitas kunci asing sangat rendah, mis. dalam skenario di atas, jika 50% dari SEMUA kota di tabel negara berada di Jepang, maka Indeks tidak akan berguna.

  • Jika Anda tidak pernah benar-benar menavigasi seluruh hubungan.

  • Jika Anda tidak pernah menghapus baris dari tabel induk (atau mencoba memperbarui PK) .

Satu pertimbangan pengoptimalan tambahan adalah apakah akan menggunakan kunci asing di Clustered Index dari tabel anak (yaitu mengelompokkan Kota menurut Negara). Ini sering bermanfaat dalam hubungan tabel induk :anak di mana merupakan tempat umum untuk mengambil semua baris anak untuk induk secara bersamaan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Membuat Kunci Asing Komposit di SQL Server (Contoh T-SQL)

  2. Jalankan skrip SQL besar (dengan perintah GO)

  3. SQL Query dengan NOT LIKE IN

  4. Ubah teks kotak teks menjadi bilangan bulat

  5. Bisakah Saya Membatasi Koma Beberapa Baris Menjadi Satu Kolom?