Minggu, 28 September 2014

Optimasi Query

Optimasi Query
Kali ini saya akan membahas tentang Optimasi Query. Optimasi Query adalah proses mencari sumber-­sumber apa saja yang di gunakan oleh query dan dapat dikurangi tanpa merubah output. Optimasi query itu  sendiri bertujuan untuk menemukan jalan akses tercepat untuk meminimalkan waktu pada saat proses sebuah query. Optimasi query ini sangat berguna manakala kita memiliki data yang sangat besar yang tersimpan dalam suatu data base. Jika data tersebut dibiarkan semakin banyak dan semakin bertumpuk dalam database, maka tentu akan mengurangi kinerja database itu sendiri. Oleh sebab itu Optimasi query perlu dilakukan. Tentunya banyak teknik yang dapat dilakukan untuk melakukan Optimasi query ini. diantaranya adalah sebagaimana diungkapkan oleh Chanowich (2001) yakni:
  1. Heuristik atau rule based
    teknik ini mengaplikasikan aturan heuristik agar terjadi keefektifan dalam proses query. optimasi jenis ini mentranformasikan query dengan sejumlah aturan yang akan meningkatkan kinerja eksekusi, yakni:
    • melakukan opersi selection diawal untuk mereduksi jumlah baris.
    • melakukan operasi projection diawal untuk mereduksi jumlah atribut
    • mengkonversikan query dengan banyak join menjadi query dengan banyak subquery
    • melakukan operasi selection dan join yang paling kecil keluaranya sebelum  operasi lain.
  2. Cost-Based
    teknik ini mengoptimasikan cost yang dipergunakan dari beberapa alternatif untuk kemudian dipilih salah satu yang menjadi cost terendah. teknik ini dapat mengoptimalkan urutan join terbalik yang dimungkinkan pada relasi-relasi r1 ke r2 ke... m. teknik in dipergunakan untuk mendapatkan pohon left-deep join yang akan menghasilkan sebuah relasi pada node sebelah kanan yang bukan hasil dari sebuah intermediate join.
Cara optimalisasi query
index pada database digunakan untuk meningkatkan kecepatan akses data. pada saat query dijalankan, index mencari data dan menentukan nilai ROWID yang menbantu menemukan lokasi data secara fisik di disk. akan tetapi penggunaan index yang tidak tepat, tidak akan meningkatkan unjuk kerja dalam hal ini kecepatan akses data.
misal tabel mahasiswa

CREATE INDEX idx_nama_nim_rombel ON mahasiswa(nama, nim, rombel) TABLESPACE INDX;

kemudian querynya

SELECT *FROM mahasiswa WHERE rombel=2';

query ini tidak menggunakan kolom nim dan hanya menggunakan kolom rombel sehingga data diurutkan berdasarkan kolom rombe. agar data diurutkan berdasarkan semua kolom maka menggunakan id sebagai dasar pengurutan

SELECT *FROM mahasiswa WHERE id BETWEEN 2010 AND 2011; 
  • Optimasi Perintah SQL
    Optimasi Perintah SQL berfungsi untuk meningkatkan kinerja desain aplikasi tersebut. Dalam desain database untuk menampilkan hasil query dibutuhkan pencarian melibatkan struktur fisik penyimpanan data. Inti dari optimasi query adalah meminialkan jalur pencarian untuk meneukan data yang disimpan dari lokasi fisik.
  • Faktor-faktor yang berpengaruh terhadap kecepatan akses data
    faktor yang berpengaruh terhadap kecepatan akses data tidak hanya pada optimasi perintah SQL,tapi terhadap hal-hal lain yang berpengaruh . Diantaranya adalah optimasi aplikasi, penggunaan cluster index, penyesueian pada pool, buffer cache, redo log buffer dan sistem operasi yang digunakan. selain optimasi query juga perlu optimalisasi aplikasi yaitu dengan desain database yang baik dan juga perlu denormalisasi setelah adanya normalisasi.
  • PLAN_TABLE merupakan suatu penyimpanan informasi yang dapat dilihat dari perintah explain plan tentang eksekusi dari suatu query. terlebih dahulu buat table PLAN_TABLE dengan menggunakan script utlxplan.sql
    Setelah itu PLAN_TABLE bisa digunakan.
    contoh :
    SQL> explain plan
    Set statement_id=’coba’
    Into plan_table for
    Select * from karyawan where gaji=2000000;
    Dalam PLAN_TABLE rencana eksekusi diatas dikenal dengan nama coba yang terdefinisi pada kolom statement_id.

    Berikut merupakan perintah untuk melihat rencana eksekusi dari coba
    SELECT LPAD(’ ’,2*Level)||Operation||’ ’||Options||’ ’||Object_Name MUFC
    FROM plan_table
    WHERE statement_id=’coba’
    CONNECT BY PRIOR id=parent_id AND statement_id=’coba’
    START WITH id=0 AND statement_id=’coba’;

    Hasil dari eksekusi query coba tersebut :
    MUFC
    ----------------------------------------------
    SELECT STATEMENT
    TABLE ACCESS FULL mahasiswa
  • Perintah dari SQL yang digunakan untuk meminta sebuah tindakan kepada DBMS.
    Pernyataan dasar SQL antara lain :
    1. ALTER : Merubah struktur tabel
    2. COMMIT : Mengakhiri eksekusi transaksi
    3. CREATE : Membuat tabel, indeks
    4. DELETE : Menghapus baris pada sebuah tabel
    5. DROP : Menghapus tabel, indeks
    6. GRANT : Menugaskan hak terhadap basis data kepada user
    7. INSERT : Menambah baris pada tabel
    8. REVOKE : Membatalkan hak kepada basis data
    9. ROLLBACK : Mengembalikan pada keadaan semula apabila transaksi gagal dilaksanakan
    10. SELECT : Memilih baris dan kolom pada sebuah tabel
    11. UPDATE : Mengubah value pada baris sebuah tabel

    A.  Nama
          Nama digunakan sebagai identitas, yaitu identitas bagi objek pada DBMS. Misal : tabel, kolom dan pengguna.

    B. Tipe data
         Tipe data yang ada dalam MYSQL :
    a. Tipe data numerik antara lain :
      1. TINYINT : Nilai integer yang sangat kecil
      2. SMALLINT : Nilai integer yang kecil
      3. MEDIUMINT : Nilai integer yang sedang
      4. INT : Nilai integer dengan nilai standar
      5. BEGINT : Nilai integer dengan nilai besar
      6. FLOAT :Bilangan decimal dengan single-precission
      7. DOUBLE :Bilangan decimal dengan double-precission
      8. DECIMAL(M,D) : Bilangan float yang dinyatakan sebagai string. M : jumlah
       digit yang disimpan, D : jumlah angka dibelakang koma

    b. Tipe data String antara lain :
      1. CHAR : Karakter yang memiliki panjang tetap yaitu sebanyak n
      2. VARCHAR : Karakter yang memiliki panjang tidak tetap yaitu maksimum n
      3. TINYBLOB : BLOB dengan ukuran sangat kecil
      4. BLOB : BLOB yang memiliki ukuran kecil
      5. MEDIUMBLOB : BLOB yang memiliki ukuran sedang
      6. LONGBLOB : BLOB yang memiliki ukuran besar
      7. TINYTEXT : teks dengan ukuran sangat kecil
      8. TEXT : teks yang memiliki ukuran kecil
      9. MEDIUMTEXT : teks yang memiliki ukuran sedang
     10. LONGTEXT : teks yang memiliki ukuran besar
     11. ENUM : kolom diisi dengan satu member enumerasi
     12. SET : Kolom dapat diisi dengan beberapa nilai anggota himpunan

    c. Tipe data tunggal dan jam :
      1. DATE : date memiliki format tahun-bulan-tanggal
      2. TIME : time memiliki format jam-menit-detik
      3. DATETIME : gabungan dari format date dan time

    C. Ekspresi
         Ekspresi digunakan untuk menghasilkan/menghitung nilai.
    Misalnya : jumlah=harga-diskon
    Ekspresi aritmatika antara lain :
    1. + : tambah
    2. – : kurang
    3. / : bagi
    4. * : kali

    D. Fungsi bawaan
       Fungsi adalah subprogram yang dapat menghasilkan suatu nilai apabila fungsi tersebut dipanggil. Fungsi Agregat adalah fungsi yang digunakan untuk melakukan summary, statistik yang dilakukan pada suatu tabel/query.
    1. AVG(ekspresi) : digunakan untuk mencari nilai rata-rata dalam kolom dari tabel.
    2. COUNT(x) : digunakan untuk menghitung jumlah baris dari sebuah kolom dari tabel
    3. MAX(ekspresi) : digunakan untuk mencari nilai yang paling besar dari suatu kolom dari tabel
    4. MIN(ekspresi) : digunakan untuk mencari nilai yang paling kecil dari suatu kolom dari tabel
    5. SUM(ekspresi) : digunakan untuk mengitung jumlah keseluruhan dari suatu kolom dari tabel

Tidak ada komentar:

Posting Komentar