it-swarm.asia

Apa itu statistik basis data, dan bagaimana saya bisa mendapat manfaat darinya?

Saya pernah mendengar menyebutkan statistik yang disimpan oleh SQL Server secara default. Apa yang mereka lacak, dan bagaimana saya bisa menggunakan informasi ini untuk meningkatkan basis data saya?

18
goric

Statistik hanyalah bentuk metadata dinamis yang membantu pengoptimal kueri dalam membuat keputusan yang lebih baik. Misalnya, jika hanya ada selusin baris dalam sebuah tabel, maka tidak ada gunanya pergi ke indeks untuk melakukan pencarian; Anda akan selalu lebih baik melakukan pemindaian tabel penuh. Tetapi jika tabel yang sama tumbuh hingga sejuta baris, maka Anda mungkin akan lebih baik menggunakan indeks. Tetapi jika Anda kueri tabel itu pada kolom yang hanya memiliki sedikit nilai unik (misalnya itu mungkin kolom "jenis kelamin" yang hanya berisi "M" atau "F"), sebenarnya FTS mungkin lebih baik daripada kasus itu karena Anda ingin perlu mengambil blok pula untuk membangun set hasil. Sekarang katakanlah meja Anda adalah 99% "M" dan hanya 1% "F", kita harus FTS dalam satu kasus atau menggunakan indeks dalam yang lain. Tabel yang sama, permintaan yang sama, berpotensi empat paket permintaan yang berbeda tergantung pada isi tabel. Hal-hal semacam ini adalah "statistik" dan bersifat individual untuk setiap basis data - bahkan dua basis data dengan tabel dan struktur indeks yang sama akan memiliki statistik yang berbeda.

Singkatnya, dalam mesin basis data modern ada dua jenis optimisasi kueri: menulis ulang SQL (optimasi berbasis aturan, seperti kompiler menulis ulang C Anda agar lebih efisien) dan memilih jalur data yang tepat (optimasi berbasis biaya) , seperti kompiler JIT yang mengidentifikasi hotspot saat runtime). Anda hanya perlu khawatir tentang ini jika Anda melihat pengoptimal kueri melakukan sesuatu yang jelas salah (mis. Memilih FTS saat Anda tah indeks akan lebih baik).

21
Gaius

Mereka digunakan oleh optimiser kueri (whitepaper pada MSDN) untuk melacak distribusi nilai dalam indeks dan/atau kolom.

Masalah Anda saja seharusnya --- perbarui secara teratur : biarkan saja mesin DB untuk melakukan tugasnya

5
gbn