Ketika Anda mencari informasi spesifik Oracle, saya akan merekomendasikan blog Ask Tom di Oracle. Secara umum, saya pikir Anda akan menemukan saran untuk tidak menyetel kueri. Anda akan mendapatkan saran bagus tentang cara menulis kueri yang dapat dioptimalkan oleh pengoptimal. Dokumentasi Oracle juga online , dan saya biasanya mencari informasi terkini tentang Oracle. Saya belum pernah bekerja dengan SQLServer jadi saya tidak punya rekomendasi untuk itu.
Saya belum melihat banyak hal baru di bidang mengoptimalkan kueri selama beberapa tahun terakhir. Perubahan besar adalah penghentian pengoptimal berbasis aturan, yang saya hampir tidak ingat bekerja dengannya. Namun, saya mengerti SQLServer masih menggunakan pengoptimal berbasis aturan, jadi memahami aturannya dapat membantu.
Alat di mana Anda dapat mengedit kueri, menjalankannya, dan membuat rencana penjelasan membantu dalam memahami perubahan apa yang membuat Anda mendapatkan kueri yang berkinerja baik. Saya memiliki hasil yang baik dengan AquaData Studio, dan sangat suka tampilan pohonnya. Pengembang SQL juga harus melakukannya.
Seperti halnya optimasi apa pun, Anda perlu memiliki data kuantitatif tentang kinerjanya. Maka Anda dapat menentukan apakah Anda benar-benar mengoptimalkannya.
Cara mengoptimalkan kueri sebagian bergantung pada bagaimana parser membangun dan mengoptimalkan kueri. Pada tingkat yang lebih besar tergantung pada distribusi data yang Anda tanyakan. Dalam database Oracle jika hasil set membuat empat persen atau lebih tabel dan didistribusikan secara acak, pemindaian tabel biasanya lebih cepat daripada indeks.
Saya telah bekerja untuk mengoptimalkan kueri untuk tim pengembang. Hanya dua atau tiga pertanyaan dalam setahun yang membutuhkan pengoptimalan serius. Sebagian besar pertanyaan cukup sederhana sehingga tidak perlu dioptimalkan. Sisanya biasanya dapat ditangani dengan menambahkan jalur gabung yang hilang.
Untuk Oracle ada tiga pengaturan merdu yang dapat secara signifikan mempengaruhi kinerja. Penentuan biaya untuk indeks dan pencarian data berinteraksi untuk mengubah kondisi di mana indeks dalam akan atau tidak akan digunakan. Keduanya dapat disetel berdasarkan per sesi. Defaultnya sering tidak optimal. Nilai lainnya mengontrol berapa banyak alternatif yang akan dicoba oleh pengoptimal. Meningkatkan nilai ini sering membantu.
Optimalisasi dipengaruhi secara signifikan oleh distribusi dan volume data. Ketika mengoptimalkannya, lebih baik menggunakan salinan database produksi, atau setidaknya database dengan distribusi dan volume data yang sama. Saya telah sangat merusak lingkungan pengujian, mengoptimalkan kueri untuk basis data pesanan produksi. Database pengujian dan pengembangan memiliki distribusi data yang sangat berbeda yang menyebabkan permintaan gagal bahkan dengan data yang jauh lebih sedikit.