Pengaturan
Di rumah dataware, saya bergabung dengan tabel fakta hingga 20 dimensi. Tabel fakta memiliki 32 juta baris dan 30 kolom. Ini adalah tabel sementara sementara jadi saya tidak harus berurusan dengan pengguna lain membaca atau menulis ke meja. Saya memilih 10 kolom dari tabel dasar dan 20 kolom dari dimensi masing-masing. Tabel dimensi kecil (antara 3 dan 15.000 baris). Bidang yang digabungkan adalah bilangan bulat dan nvarchars. Saya menggunakan SELECT ... INTO statement. Tidak ada indeks pada tabel.
Kecepatan eksekusi permintaan ini terlalu lambat untuk berguna.
Solusi yang sudah dicoba
Karena permintaannya terlalu lama untuk diproses, saya mencoba solusi berikut:
- Bagi 20 gabungan menjadi 4 bergabung di 5 tabel. Namun kinerja permintaan tetap rendah.
- Masukkan indeks pada kolom kunci asing. Tidak ada penurunan waktu yang signifikan.
- Pastikan bidang kondisi gabungan bilangan bulat. Saya perhatikan peningkatan kinerja 25%. Tidak cukup apa yang saya cari.
- Gunakan masukkan ke dalam pernyataan alih-alih pilih ke. Kinerja lebih buruk karena pertumbuhan file log meskipun database dalam mode pemulihan sederhana.
Temuan ini membuat saya memasukkan rencana pelaksanaan aktual yang menunjukkan bahwa 89% dari biaya terletak pada tabel insert . Biaya lainnya adalah 8% pemindaian tabel pada tabel fakta dan 2% pada pencocokan hash untuk gabungan dalam.
Pertanyaan
- Apa alasan yang mungkin dari penyisipan tabel lambat?
- Apa cara untuk mengidentifikasi hambatan ini tanpa rencana eksekusi?
- Tindakan apa yang bisa saya ambil untuk mengurangi biaya memasukkan tabel?