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

Kinerja Pengindeksan BigInt vs VarChar

Anda harus PASTI memperkenalkan pengganti INT IDENTITY() kunci utama!!INT sudah memberi Anda potensi hingga 2 miliar baris - bukankah itu cukup??

Kunci utama/kunci berkerumun ini pada SQL Server akan berukuran hingga 64 byte (bukan 4, untuk INT) - yang akan membuat indeks berkerumun Anda DAN semua indeks yang tidak berkerumun membengkak tanpa bisa dikenali. Seluruh kunci pengelompokan (semua 8 kolom Anda) akan disertakan pada setiap halaman dari setiap indeks yang tidak berkerumun di tabel itu - tentu saja membuang banyak ruang.

Jadi pada tabel indeks mana pun, Anda akan memiliki entri hingga 16 kali lebih banyak dengan kunci berkerumun INT pengganti - itu berarti lebih sedikit I/O, lebih sedikit waktu yang terbuang untuk membaca halaman indeks.

Dan bayangkan mencoba membuat hubungan kunci asing ke tabel itu.... tabel anak mana pun harus memiliki 8 kolom semua dari kunci utama Anda sebagai kolom kunci asing, dan tentukan semua 8 kolom di setiap gabungan - sungguh mimpi buruk!!

Pada 78 juta baris, bahkan hanya mengubah kunci pengelompokan ke INT IDENTITY akan menghemat hingga 60 byte per baris - itu saja akan menghasilkan ruang disk hingga 4 GByte (dan penggunaan RAM di server Anda). Dan itu bahkan belum mulai menghitung penghematan pada indeks non-clustered.......

Dan tentu saja, ya, saya juga akan mengubah VARCHAR(10) menjadi INT atau BIGINT - jika itu angka, buat tipe bidang numerik - tidak ada gunanya meninggalkannya di VARCHAR(10), sungguh. Tapi itu saja tidak akan membuat perbedaan besar dalam hal kecepatan atau kinerja - itu hanya membuat bekerja dengan data menjadi lebih mudah (tidak harus selalu beralih ke tipe numerik ketika misalnya membandingkan nilai dan sebagainya).

Marc



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa gunanya kursor di SQL Server?

  2. Ukuran baris maksimum 8060 Kesalahan

  3. Bagaimana cara menemukan duplikat di beberapa kolom?

  4. T-SQL. Bagaimana cara membuat daftar sebagai string yang dipisahkan koma dalam satu SELECT?

  5. Salin beberapa catatan dengan hubungan master-detail