Pages

Sabtu, 05 Januari 2013

Optimasi Query

Dilakukan untuk mempercepat akses data, ketika kita membentuk suatu sistem basis data maka yang kita bayangkan adalah jika suatu nanti data saya akan bertambah banyak, apakah sistem bisa stabil, dengan kecepatan akses yang tinggi?
Pertanyakan demikian lah yang menuntun kita mempelajari optimasi query
/*Optimasi Pada Perintah SQL*/
Penggunaan index pada database bisa meningkatkan kecepatan, index mencari data dan menemukan nilai ROWID yang membantu menemukan lokasi data secara fisik di disc.
Contoh
CREATE INDEX idx_kota_prop_kodepos
ON karyawan(kota,prpinsi,kode_pos)
TABLESPACEINDX;
Lalu ketika user melakukan query sebagai berikut
SELECT*FROM karyawan WHERE propinsi='Jawa Barat';
Proses pencarian akan lebih cepat jika diletakkan dalam block tabel berdekatan daripada harus mencari datafile yang terletak pada block yang berbeda.
Untuk alternatif lain, bisa digunakan perintah untuk membuat tabel lain yang memiliki urutan yang berbeda dari tabel asal
CREATE TABLE karyawan_urut AS SELECT*FROM karyawan ORDER BY id;
/*Faktor lain yang berpengaruh terhadap kecepatan akses data*/
Tidak hanya dari segi perintah sql namun penggunaan optimasi aplikasi, cluster dan index juga dapat mempengaruhi
1. Optimasi Aplikasi
Terkadang normalisasi sampai ke level lebih lanjut belum tentu desain SBD akan efisien. Dalam pembuatan aplikasi hendaknya memperhatikan apakah akses data sudah efisien.
2. Cluster merupakan penyimpanan data dari tabel yang berbeda dalam suatu struktur fisik disk yang berdekatan. Konfigurasi ini bermanfaat untuk akses data dari beberapa tabel yang sering di quey.

SubQuery Lanjutan



Sesuai janji saya, saya akan memposting Materi SubQuery.
Apa itu SubQuery? SubQuery adalah statement SELECT yang dilampirkan sebagai klausa dalam SQL statement yang lain.


Pada gambar di atas terlihat bahwa sub query dijalankan sekali sebelum main query. Contoh penulisan posisi penulisan subquery dalam SQL command :
SELECT select_list
FROM table
WHERE expr operator (SELECT select_list FROM table);


*) Penggunaan SubQuery
Tabel employees
employee_id
name
address
salary
111
Dharu Wihartasih
Kudus
2500000
112
Annisa Kristi
Pemalang
2450000
113
Afifah
Kudus
3100000
114
Rizka Sweet  J.
Salatiga
2350000
115
Chintia Riadina M.
Semarang
2550000
116
Miskatun Niswah
Semarang
2400000
117
Fatati Nuriana
Banyumas
2300000
118
Darkonah
Brebes
2500000

Salah satu dari penggunaan Subquery adalah untuk menyelesaikan persoalan dimana terdapat suatu nilai yang tidak diketahui (unknown values). Berikut contohnya :
SELECT name
FROM employees
WHERE salary >  (SELECT salary FROM employees WHERE employees_id=111);


Maka bisa kita lihat hasilnya,
name
Afifah
Chintia Riadina M.

Mudahkan asalkan kita bisa menerapkan logika dari query penggunaan subquery akan lebih mudah.
Contoh dari penggunaan subquery yang kedua yaitu dapat menggunakan aggregate function seperti count , sum, avg, distinct. Lihat contoh berikut ini.
Tabel Mahasiswa
nim
namaMhs
5302411108
Annisa Kristi
5302411114
Dharu Wihartasih
5302411149
Afifah
5302411111
Reni Ikawati
5302411133
Rizka Sweet J
5302411131
Chintia Riadina M

Tabel Nilai
nim
KodeMK
nilai
5302411111
101
88
5302411114
102
78
5302411114
103
84
5302411133
101
85
5302411149
102
87
5302411108
103
79
5302411131
101
82

Tabel MataKuliah
KodeMK
namaMK
Sks
101
Pemrograman Berorientasi objek
2
102
Sistem Basis Data
2
103
Pengolahan Sinyal Digital
2

Secara umum untuk menampilkan nilai maksimal pada KodeMK =’102’ adalah sebagai berikut.
Select*from Nilai where KodeMK=’102’ order by nilai desc limit 0,1;
Maka akan tampil
nim
KodeMK
Nilai
5302411149
102
87

Itu penggunaan secara umum untuk menampilkan data tertinggi yang tidak diketahui, namun bila kita menggunakan sub query syntaknya:
SELECT nim,kodeMK,nilai from nilai where nilai=max(nilai);
Secara logika sudah benar, tetapi ditemukan eror
Kita akan menggunakan aggregate function yaitu MAX, akan tetapi sayang sekali  hanya bisa digunakan setelah kata SELECT dan HAVING. Maka dari itu  kita membutuhkan subquery sebagai tambahan untuk memperjelas klausa.
Select nim,kodeMK,nilai where nilai =(select max(nilai) from nilai);
Bisa kita lihat penggunaan subquery dalam hal penggunaan aggregate function untuk tambahan clausa di WHERE