Haruskah saya membangun kembali indeks setelah masukkan terpotong / besar?

10

Saya memiliki prosedur tersimpan yang memotong beberapa tabel dengan sekitar 1,75M baris di masing-masing, sebelum memasukkan data baru (berdasarkan data dalam tabel lain, perhitungan, dll.)

Garis dasar sangat sederhana:

  • Tabel terpotong
  • Masukkan baris 1,75M dalam 'kumpulan' sekitar 75.000 per waktu.

Saya bertanya-tanya apakah saya harus secara eksplisit membangun kembali indeks kapan saja dalam proses ini? misalnya

  • Tabel terpotong
  • ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [atau yang serupa]
  • Masukkan baris 1,75M

atau mungkin

  • ALTER INDEX ALL ON xxx DISABLE
  • Tabel terpotong
  • Masukkan baris 1,75M
  • ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [atau yang serupa]

Bantuan apa pun yang dihargai ... bukan DBA - Dev yang tahu DB dengan cukup baik lebih akurat!

BlueChippy
sumber
Beberapa informasi lebih lanjut tentang struktur tabel, indeks yang ada saat ini dan tampilan data yang dimasukkan (apakah itu dalam urutan tertentu? Apakah itu sejalan dengan indeks berkerumun?) Akan membantu. Saya juga menganggap tabel ini tidak tersedia sampai proses ini selesai? Itu bagus untuk diketahui memiliki opsi untuk mengimpor massal.
Mike Walsh
Mungkin Anda harus memotong masukkan tabel ke dalamnya dan lihat apa indeks fragmentasi Anda untuk melihat apakah Anda perlu atau tidak.
Zane
v: Standar 2008. Sumber data adalah beberapa tabel staging, sebelum ini memuat data dari csv, excel, Oracle dan SQL db's lainnya. Struktur tabel semuanya identik pada tahap ini: 6 char ID, 3 char code, 10 cols desimal (20,5). Kunci utama adalah ID + Kode. Data yang dimuat melalui insert intodan saat ini tidak ada order byklausa, tetapi saya bisa menambahkan bahwa jika itu akan membantu? ID dan Kode juga diindeks secara terpisah.
BlueChippy

Jawaban:

6

Seperti kebanyakan pertanyaan jenis ini, itu tergantung. Tidak mungkin bahwa Anda akan memasukkan data dalam urutan "benar" untuk semua indeks yang terlibat, yang berarti bahwa semua indeks tersebut cenderung menemui banyak pemisahan halaman selama proses penyisipan. Jadi mari kita asumsikan bahwa Anda memasukkan dalam urutan indeks berkerumun. Anda bisa menonaktifkan semua indeks yang tidak berkerumun, memotong, melakukan penyisipan Anda, dan kemudian membangun kembali semua indeks yang tidak berkerumun. Tentu saja, mencoba kedua pendekatan itu akan memberi tahu Anda kebenaran yang lebih cepat terlepas dari teori di baliknya. :)

Ben Thul
sumber
1

Plan Basic dengan semua indeks yang diaktifkan mungkin lambat dan dapat menyebabkan fragmentasi.

ALTER INDEX REBUILD pada tabel terpotong dan karenanya kosong tidak ada gunanya, jadi Anda perlu mengubah Rencana Anda A. Seharusnya:

  • MEMOTONG
  • Memasukkan
  • ALTER INDEX REBUILD

Mungkin masih lambat, tapi setidaknya Anda mendapatkan indeks yang tajam.

Paket B baik-baik saja. Tes ketiganya dan lihat mana yang tercepat dan yang memberikan indeks fragmentasi paling sedikit. Kemudian putuskan apakah pembangunan kembali layak dilakukan.

Orbilin
sumber