Saya membuat transisi sebagai pengembang basis data dari SQL Server ke Oracle dan sudah menemukan beberapa sumber daya yang fantastis di sini ( Bagaimana membuat transisi dari SQL Server DBA ke Oracle? Dan Sebagai DBA, bagaimana cara saya beralih dari Oracle ke SQL Server? ? ) tetapi saya kesulitan menemukan informasi yang baik tentang penggunaan tabel indeks terorganisir di Oracle.
Dalam kehidupan saya sebelumnya, kami menggunakan ekstensif indeks berkerumun di SQL Server di OLTP-ish datamart kami dengan sangat sukses. Apakah tabel indeks terorganisir sebagai alat yang berguna di Oracle?
sql-server
oracle
index
JHFB
sumber
sumber
Jawaban:
Jika Anda beralih dari SQL Server ke Oracle, saya akan menyarankan untuk mencoba menumpuk tabel pada awalnya karena mereka adalah bentuk standar menyimpan data di Oracle. Untuk sebagian besar beban kerja, tumpukan tabel dengan indeks reguler di Oracle adalah bentuk penyimpanan yang paling seimbang mengenai DML dan kinerja kueri.
Jika kemudian Anda menemukan bahwa Anda memiliki masalah kinerja atau hambatan, Anda harus melihat ke metode penyimpanan canggih khusus seperti IOT, partisi, cluster, indeks kunci terbalik, dll.
Mengenai IOT secara khusus, saya akan menyarankan agar penggunaannya tidak digeneralisasi karena ada banyak "gotcha" yang mungkin tidak ingin Anda masuki sebagai pemula:
sumber
IOT di Oracle tidak persis sama dengan indeks berkerumun di SS karena statistik Oracle mencakup hamburan fisik baris, sedangkan SS tidak memasukkan lokasi fisik dalam statistiknya. Lihat debat antara Lewis dan Fritchey tentang Statistik di Oracle dan Sql Server untuk informasi lebih lanjut. ( http://www.red-gate.com/products/oracle-development/deployment-suite-for-oracle/education/webinars/webinar-statistics-oracle-sql-server-jonathan-lewis ) Itulah sebabnya mengapa dikelompokkan indeks dalam SS lebih baik daripada tumpukan. Indeks berkerumun menambahkan data lokasi fisik ke statistik. IOT bagus ketika Anda tahu bahwa indeks menyediakan colokasi baris data yang akan dicari, misalnya indeks pada order_date dan pelanggan untuk tabel pesanan akan menghasilkan IOT yang baik.
sumber
Vincent membuat beberapa poin hebat dari peringatan IOT, tetapi Anda bisa mendapatkan beberapa manfaat signifikan dari mereka.
Secara pribadi saya pikir mereka secara signifikan kurang digunakan di Oracle dan harus dipertimbangkan lebih luas - bukan hanya sebagai solusi untuk masalah kinerja. Karena Anda harus membuat ulang tabel untuk mengkonversi antara IOT dan heap, ini adalah perubahan yang tidak mungkin terjadi pada database yang selalu digunakan, banyak digunakan kecuali masalah kinerja yang parah.
Martin Widlake memiliki serangkaian posting hebat tentang IOT. Ada beberapa manfaat signifikan yang bisa Anda dapatkan dengan menggunakannya:
Namun, untuk mendapatkan manfaat ini, Anda memerlukan tabel di mana Anda (hampir) selalu menyertakan kolom utama kunci utama dalam kueri dan Anda kemungkinan akan mengambil beberapa baris sekaligus. Beberapa contoh umum dari tabel tersebut adalah:
customer_addresses
tabel, jauh lebih umum untuk menemukan semua alamat untuk pelanggan, daripada semua pelanggan untuk alamat.Kelemahannya adalah memasukkan data lebih lambat, jadi Anda harus mempertimbangkan biaya dan manfaatnya. Pada akhirnya, Anda harus mengetahui data Anda dan memahami bagaimana data itu digunakan yang seharusnya memandu keputusan.
sumber