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

Apakah tampilan lebih cepat daripada kueri sederhana?

Ya , tampilan bisa memiliki indeks berkerumun yang ditetapkan dan, ketika mereka melakukannya, mereka akan menyimpan hasil sementara yang dapat mempercepat kueri yang dihasilkan.

Dokumentasi Microsoft sendiri memperjelas bahwa Views dapat meningkatkan kinerja.

Pertama, sebagian besar tampilan yang dibuat orang sederhana melihat dan tidak menggunakan fitur ini, dan karena itu tidak berbeda dengan menanyakan tabel dasar secara langsung. Tampilan sederhana diperluas di tempatnya sehingga tidak berkontribusi langsung pada peningkatan kinerja - itu benar. Namun, tampilan yang diindeks dapat secara dramatis meningkatkan kinerja.

Biar saya langsung ke dokumentasinya:

Setelah indeks berkerumun unik dibuat pada tampilan, kumpulan hasil tampilan segera terwujud dan disimpan dalam penyimpanan fisik dalam database, menghemat overhead untuk melakukan operasi yang mahal ini pada waktu eksekusi.

Kedua, tampilan yang diindeks ini dapat berfungsi bahkan ketika tidak direferensikan secara langsung oleh kueri lain karena pengoptimal akan menggunakannya sebagai pengganti referensi tabel bila perlu.

Sekali lagi, dokumentasinya:

Tampilan yang diindeks dapat digunakan dalam eksekusi kueri dalam dua cara. Kueri dapat mereferensikan tampilan yang diindeks secara langsung, atau, yang lebih penting, pengoptimal kueri dapat memilih tampilan jika menentukan bahwa tampilan dapat diganti untuk beberapa atau semua kueri dalam paket kueri berbiaya terendah. Dalam kasus kedua, tampilan yang diindeks digunakan sebagai ganti tabel yang mendasari dan indeks biasa mereka. Tampilan tidak perlu direferensikan dalam kueri agar pengoptimal kueri menggunakannya selama eksekusi kueri. Hal ini memungkinkan aplikasi yang ada untuk mendapatkan manfaat dari tampilan terindeks yang baru dibuat tanpa mengubah aplikasi tersebut.

Dokumentasi ini, serta bagan yang menunjukkan peningkatan kinerja, dapat ditemukan di sini.

Pembaruan 2: jawabannya telah dikritik atas dasar bahwa "indeks" yang memberikan keunggulan kinerja, bukan "Tampilan". Namun, ini dengan mudah dibantah.

Katakanlah kami adalah perusahaan perangkat lunak di negara kecil; Saya akan menggunakan Lituania sebagai contoh. Kami menjual perangkat lunak di seluruh dunia dan menyimpan catatan kami dalam database SQL Server. Kami sangat sukses dan, dalam beberapa tahun, kami memiliki 1.000.000+ catatan. Namun, kami sering kali perlu melaporkan penjualan untuk tujuan pajak dan kami menemukan bahwa kami hanya menjual 100 salinan perangkat lunak kami di negara asal kami. Dengan membuat tampilan yang diindeks hanya dari catatan Lituania, kita dapat menyimpan catatan yang kita butuhkan dalam cache yang diindeks seperti yang dijelaskan dalam dokumentasi MS. Saat kami menjalankan laporan kami untuk penjualan Lituania pada tahun 2008, kueri kami akan menelusuri indeks dengan kedalaman hanya 7 (Log2(100) dengan beberapa lembar yang tidak digunakan). Jika kita melakukan hal yang sama tanpa VIEW dan hanya mengandalkan indeks ke dalam tabel, kita harus melintasi pohon indeks dengan kedalaman pencarian 21!

Jelas, Tampilan itu sendiri akan memberi kami keunggulan kinerja (3x) dibandingkan penggunaan indeks yang sederhana saja. Saya telah mencoba menggunakan contoh dunia nyata, tetapi Anda akan melihat bahwa daftar sederhana penjualan Lituania akan memberi kami keuntungan yang lebih besar.

Perhatikan bahwa saya hanya menggunakan b-tree lurus untuk contoh saya. Meskipun saya cukup yakin bahwa SQL Server menggunakan beberapa varian dari b-tree, saya tidak tahu detailnya. Meskipun demikian, intinya tetap ada.

Pembaruan 3 Pertanyaan telah muncul tentang apakah Tampilan Terindeks hanya menggunakan indeks yang ditempatkan pada tabel yang mendasarinya. Artinya, dengan memparafrasekan:"tampilan yang diindeks setara dengan indeks standar dan tidak menawarkan sesuatu yang baru atau unik untuk tampilan." Jika ini benar, tentu saja, analisis di atas salah! Izinkan saya memberikan kutipan dari dokumentasi Microsoft yang menunjukkan mengapa menurut saya kritik ini tidak valid atau benar:

Menggunakan indeks untuk meningkatkan kinerja kueri bukanlah konsep baru; namun, tampilan yang diindeks memberikan manfaat kinerja tambahan yang tidak dapat dicapai dengan menggunakan indeks standar.

Bersama dengan kutipan di atas mengenai persistensi data dalam penyimpanan fisik dan informasi lain dalam dokumentasi tentang bagaimana indeks dibuat di Views, saya pikir aman untuk mengatakan bahwa Tampilan Terindeks tidak hanya SQL Select yang di-cache yang kebetulan menggunakan indeks yang ditentukan pada tabel utama. Jadi, saya terus mendukung jawaban ini.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Membuat database secara terprogram di SQL Server

  2. Berbagai Cara untuk Memantau Grup Ketersediaan AlwaysOn SQL Server

  3. SQL Server SELECT di mana kolom mana pun berisi 'x'

  4. SQL Server:Permintaan cepat, tetapi lambat dari prosedur

  5. Cara Mengonversi Stempel Waktu Unix ke Nilai Tanggal/Waktu di SQL Server