Sabtu, 04 Januari 2014

Review Arsitektur Sistem Basis Data

Sistem Basis Data

Review Arsitektur Sistem Basis Data

Arsitektur atau dalam kata dasarnya, Struktur artinya komponen-komponen apa yang ada dalam suatu sistem dan fungsi masing-masing komponen tersebut, serta bagaimana inter-relasi dan interaksi antar komponen dalam sistem tersebut. Dari pengertian tersebut maka dapat disimpulkan bahwa secara garis besar Basis Data memiliki susunan atau arsitektur sebagai berikut:


DBMS (Data Base Management System) : bagian dari perangkat lunak yang bertanggungjawab dalam create, read, update, delete record atau mengelola basis data.

DDL (Data Definition Language) : yang dipakai oleh DBMS untuk secara fisik menetapkan jenis record, field dan struktur hubungannya.

DML (Data Manipulation Language) : dipakai untuk membuat, membaca dan meng-update record dalam basis data, dan melakukan navigasi antara record-record yang berbeda.
Metadata (Data yang menjelaskan data lain) : seperti merekam dan mendefinisikan field, sinonim, hubungan data, aturan validasi, pesan pembantu, dan sebagainya.

Dalam berbagai macam arsitektur/susunan tersebut diperlukan sebuah Standarisasi demi membentuk Reference Architecture. Standarisasi tersebut diantaranya:

- Berdasarkan Komponen:
Inter-relasi antar komponen yang masing-masing mempunyai fungsi yang berbeda-beda.

- Berdasarkan Fungsi:
Penyediaan fungsi-fungsi/fasilitas-fasilitas yang dapat memenuhi kebutuhan user yang berbeda-beda. Strukturnya kebanyakan berbentuk hirarkhi, sesuai klasifikasi user, contohnya ISO/OSI model.

- Berdasarkan Data:
Karena data merupakan sumber daya utama yang di-manage oleh DBMS, maka pendekatan ini menjadi pilihan yang tepat untuk melangkah lebih jauh ke proses standardisasi. Penyediaan beberapa tipe data dan arsitektur sistem ditekankan pada penyediaan fungsi  berdasarkan klasifikasinya yang dapat menggunakan tipe-tipe data pada masing-masing klasifikasi.

Arsitektur sistem yang berbasis organisasi data. Menurut ANSI/Sparc, arsitektur basis data terbagi atas tiga level yaitu :

1. Tingkat eksternal (external level)
Tingkat eksternal merupakan cara pandang pemakai terhadap basis data. Pada tingkat ini menggambarkan bagian basis data yang relevan bagi seorang pemakai tertentu. Tingkat eksternal terdiri dari sejumlah cara pandang yang berbeda dari sebuah basis data. Cara pandang secara eksternal hanya terbatas pada entitas, atribut, dan hubungan antar entitas (relationship) yang diperlukan saja. contoh beberapa jenis pengguna basis data:

      a. Programmer : bahsa yang digunakan adalah bahasa pemrograman seperti Java,C,COBOL dll.

      b. End user : bahasa yang digunakan adalah bahasa query atau menggunakan fasilitas yang tersedia pada
          program aplikasi. Pada level ini user dibatasi pada perangkat keras maupun lunak yang digunakan pada
          basis data.


2. Tingkat konseptual (conceptual level)

Tingkat konseptual merupakan kumpulan cara pandang terhadap basis data. Pada tingkat ini menggambarkan data yang disimpan dalam basis data dan hubungan antara datanya.


3. Tingkat Internal (Internal level)
Tingkat internal merupakan perwujudan basis data dalam computer. Pada tingakat ini menggambarkan bagaimana basis data disimpan secara fisik didalam peralatan strorage yang berkaitan erat dengan tempat penyimpanan/physical storage.
Tingkat internal memperhatikan hal-hal berikut ini:
- Alokasi ruang penyimpana data dan indeks
- Deskripsi record untuk penyimpanan (dengan ukuran penyimpanan untuk data elemen)
- Penempatan record
- Penempatan data dan teknik enscryption.



Arsitektur DBMS
Arsitektur data menjadi sebuah sumber bisnis pada sebuah lingkungan basis data. Database arsitektur mengacu pada teknologi database yang menckup database engine, database utility, alat CASE database untuk analisa dan desain, dan alat pengembangan aplikasi database.
Arsitektur Basis Data dibangun menggunakan format paket bahasa yaitu DDL, dan DML.– DDL (Data Definition Language), yang merupakan satu paket bahasa DBMS yang berguna untuk melakukan spesifikasi terhadap skema basis data. Contoh perintah DDL misalnya, Create Table, Create Index, DML (Data Manipulation Language), yang merupakan satu paket DBMS yang memperbolehkan pemakai untuk mengakses atau memanipulasi data sebagaimana yang telah diorganisasikan sebelumnya dalam model data yang tepat. Dengan DML kita akan dapat :
o Mengambil informasi yang tersimpan dalam basis data.
o Menyisipkan informasi baru dalam basis data.
o Menghapus informasi dari tabel.

Tipe File
Tipe-tipe file yang digunakan dalam DBMS dibedakan menjadi :
• File Induk (master File)
• File Transaksi (transaction file)
• File Laporan (Report file)
• File Sejarah (history file)
• File Pelindung (backup file)

Senin, 07 Oktober 2013

Integritas Basis Data

Integritas Basis Data

Constraint Classification (Tipe-tipe Constraint)

Constraint tersebut intra-relasional apabila batasan (constraint) terpenuhi dalam satu tabel. Constraint ini sendiri dapat dibedakan menjadi 2 yaitu: tuple constraint dan domain constraint.

Tuple constraint merupakan constraint yang bisa dievaluasi secara independen pada setiap tuple-nya.
Domain constraint atau sering disebut sebagai value constraint merupakan suatu constraint dengan referensi kepada nilai (value) tertentu. Implementasi dari penggunaan domain constraint pada SQL adalah penggunaan klausa check
Suatu constraint dikatakan inter-relasional apabila melibatkan lebih dari satu relasi. Bentuk dari constraint ini adalah referential integrity
Ada beberapa bentuk dari integrity constraint yaitu domain constraint, referential integrity, assertion, trigger.

Domain constraints
 
Domain constraint merupakan bentuk integrity constraint yang paling sederhana. Setiap ada pemasukan data baru, maka akan langsung diperiksa oleh sistem. Domain constraint diterapkan pada atribut basis data sehingga sangat dimungkinkan beberapa atribut memiliki domain yang sama.
Untuk menciptakan domain baru dapat digunakan perintah create domain. Sebagai contoh adalah pada perintah:
 create domain Dollar numeric (12,2)
 create domain Pound numeric (12,2)
Pada bahasa SQL juga terdapat klausa check yang bisa digunakan untuk memeriksa suatu kondisi nilai tertentu yang diinginkan. Berikut adalah contoh penggunaan klausa check pada perintah create domain.

Create domain HourlyWage numeric(5,2) constraint wage-value-test check (value>=4.00)
Perintah tersebut akan mengecek nilai dari domain HourlyWage harus ≥ 4.00

Referential Integrity

Integritas referensial adalah seperangkat aturan yang mengatur hubungan antara kunci primer dengan kunci tamu milik tabel-tabel yang berada dalam suatu basis data relasional untuk menjaga konsistensi data .
Tujuan integritas referensial sendiri adalah untuk menjamin dan memastikan agar entitas dalam suatu tabel yang menunjuk ke suatu pengenal unik pada suatu baris di tabel lain benar-benar menunjuk pada nilai yang memang ada. Sehingga kejadian seperti pada ilustrasi  seperti gambar diobawah tidak terjadi

Berdasarkan operasi yang dilakukan, integritas referensial dapat dibedakan sebagai berikut:
penambahan (insert)
penghapusan (delete)
peremajaan (update)
Integritas referensial membuat ketiga operasi di atas dapat dilaksanakan pada tabel yang memiliki relasi. Sehingga proses penghapusan ataupun peremajaan suatu kolom juga akan terjadi pada kolom tabel lain yang mempunyai referensi dengannya.

Dalam bahasa Data Definition Language SQL, kunci primer, kunci kandidat, dan kunci tamu, dapat dispesifikasikan sebagai bagian dari pernyataan SQL create table. Kunci kandidat merupakan kunci yang secara unik dapat digunakan untuk mengidentifikasi suatu baris dalam tabel. Berikut adalah salah satu contoh DDL dari pembuatan tabel mata_kuliah.

create table mata_kuliah
    (kode_mk char(6) not null,
     mata_kuliah varcar(25),
     nip char(9),
     primary key (kode_mk),
     foreign key (nip) references dosen on delete cascade)

Assertion

Penggunaan constraint berupa kunci primer dan kunci tamu pada deklarasi awal tabel merupakan salah satu cara untuk memelihara integritas data. Domain constraint dan Referential integrity constraint merupakan salah satu bentuk dari assertion.
Pada beberapa basis data penggunaan kunci primer dan kunci tamu sudah cukup untuk menjaga integritas data. Tetapi pada beberapa kasus basis data diperlukan suatu constraint ataupun aturan yang lebih baik.
Metode lain yang sering digunakan dalam pemeliharaan integritas adalah assertion dan trigger

Assertion digunakan untuk mengekspresikan suatu kondisi basis data sesuai dengan yang kita inginkan. Seperti halnya prosedur, assertion diberikan nama tertentu sehingga bisa dibatalkan apabila ada kondisi tertentu yang menuntut perubahan struktur basis data. Syntax dari definisi assertion adalah sebagai berikut.

create assertion AssertionName check (predicate)

Ketika assertion dibuat, maka sistem akan melakukan pengecekan validitas dari assertion yang dibuat. Jika assertion yang dibuat valid maka perubahan terhadap basis data hanya akan berlaku ketika tidak menyalahi assertion yang telah dibuat.

Pengecekan validitas tersebut akan memakan biaya yang besar terutama apabila assertion yang dibuat cukup rumit, sehingga penggunaan dan pembuatan assertion harus dilakukan dengan hati-hati
Karena itu tidak banyak developer sistem dan DBMS yang menyediakan fasilitas ini.

Create assertion IC13 check
( ( Select min (s.status) from s ) > 4 );
Create assertion IC18 check
(not exists ( select * from P
                     where not ( P.Weight > 0.0 )));
Create assertion IC99 check
( not exists ( select * from P
            where P.color = ‘Red’
            and P.city <> ‘London’));
Create assertion IC49 check
( not exists ( select * from P, SP
            where P.P# = SP.P#
             and  ( P.weight * SP.Qty) > 20000));
Create assertion IC95 check
( not exists ( select * from S, SP
            where S.status < 20
            and S.S# = SP.S#
            and SP.Qty > 500 ));

Trigger

Trigger merupakan pernyataan yang dieksekusi secara otomatis oleh sistem basis data sebagai akibat dari perubahan basis data. Ada beberapa persyaratan yang harus dipenuhi untuk merancang mekanisme trigger, yaitu:

- Menspesifikasikan kapan trigger harus dieksekusi.
- Menspesifikasikan perintah yang akan dilaksanakan ketika trigger dijalankan

Trigger sebenarnya tidak lain adalah suatu pemrograman PL/SQL yang mirip dengan procedure. Perbedaan mendasar dengan procedure adalah aktivasinya, dimana procedure dapat dipanggil secara langsung sementara trigger dipanggil melalui pemicu yang berupa bahasa DML (Data Manipulation Language). Bahasa DML yang digunakan sebagai pemicu adalah insert, update dan delete.

SQL Supports

SQL mendukung sejumlah kendala integritas yang berbeda. Ini beberapa diantaranya:

Primary-Key
Primary-Key mengatakan bahwa atribut (Aj1, Aj2,..., Ajm) membentuk primary key untuk relasi. Primary Key dituntut untuk non null dan unik, yaitu, tidak ada tuple yang dapat memiliki
nilai null untuk atribut Primary-Key, dan tidak ada dua tupel dalam relasi
dapat sama pada semua atribut Primary-Key. Meskipun spesifikasi Primary-Key
opsional , biasanya ide yang baik untuk menentukan Primary-Key untuk setiap relasi .

Foreign-Key
Spesifikasi Foreign-Key mengatakan bahwa nilai-nilai atribut (AK1, AK2, ..., AKN) untuk setiap tupel dalam relasi harus sesuai dengan nilai-nilai dari atribut Foreign-Key dari beberapa tuple dalam
hubungan s.

Not-null
Kendala Not-null pada atribut menentukan bahwa nilai null tidak diperbolehkan untuk atribut tersebut, dengan kata lain, kendala tidak termasuknilai null dari domain dari atribut tersebut.

Minggu, 22 September 2013

Optimasi Query

Optimasi Query

Optimasi SQL

Database administrator dan programer sering menggunakan SQL (Structured Query Language) untuk memberikan instruksi kepada database. Tetapi hati-hati, berikan instruksi yang tepat agar database Anda tidak ngambek.

  
JIKA DIIBARATKAN manusia, database adalah sahabat yang patuh dan mengerti pada setiap perintah yang diberikan, sayangnya terkadang tidak berlaku sebaliknya, kita tidak patuh dan tidak mengerti pada “perintah” yang diberikan database.


Database kadang dapat “mengomel” dengan berbagai cara, bisa jadi dalam bentuk performance yang menurun, pesan kesala han, atau bahkan hasil laporan yang tidak sesuai. Semua-nya dapat kita minimalisasi, bahkan sebelum hal itu terjadi.

SQL dan RDBMS

Optimasi dapat dilakukan dengan berbagai cara, dengan memahami tuning performance pada database dan best practice dari berbagai sumber, Anda dapat memiliki fundamental yang kuat dalam mengoptimalkan kinerja database.

Beberapa teknik dan metode mungkin memerlukan perlakuan khusus yang berbeda, tergantung pada database yang Anda gunakan.

Sebagai contoh, peningkatan kinerja bisa dilakukan dari sisi administrasi database seperti kon?  gurasi ?le dan peng-updatean  service atau  security pack, yang tentunya masing-masing database memiliki keunikan dan teknik tersendiri.

Lalu, dengan pertimbangan kompatibilitas, adakah optimasi yang dapat dilakukan secara umum?

Terdapat seperangkat metode dan teknik yang umum diterapkan saat Anda bekerja dengan RDBMS (Relational Database Management System), mungkin tidak semuanya dapat Anda implementasikan karena sangat tergantung pada lingkungan aplikasi masing-masing, tetapi setidaknya Anda dapat meng-gunakannya sebagai panduan dan referensi untuk membentuk sistem yang terbaik sesuai dengan kondisi yang dihadapi.

Optimasi melalui perintah SQL juga memegang peranan   yang tidak kalah penting. Inti dari SQL itu sendiri adalah perintah untuk melakukan pengambilan (retrieval), penambahan (insertion), modi?kasi (updating), dan penghapusan (deletion) data, disertai dengan fungsi-fungsi pendukung administrasi dan managemen database.

SQL sendiri merupakan sebuah bahasa atau pemrograman standar untuk RDBMS. Walaupun disebut bahasa, mungkin sedikit janggal saat kita menyebut bahasa pemrograman SQL, lebih familiar jika yang terdengar adalah pemrograman C, Visual Basic, Java, Delphi, dan seterusnya.

Bahasa-bahasa yang disebut belakangan termasuk dalam pemrograman imperative, mudahnya adalah bahasa yang berbentuk instruksi-instruksi inti. Sedangkan, SQL termasuk dalam pemrograman declarative, yang lebih berbentuk kalimat atau pernyataan.

Dalam pengembangannya, SQL terbagi-bagi lagi dalam berbagai extension sehingga melahirkan berbagai sebutan seperti SQL/PSM (Persistent Stored Modules) yang merupakan standar ANSI/ISO, T-SQL (Transact-SQL) dari Microsoft dan SyBase, PL/SQL (PL merupakan singkatan dari Procedural Language) yang digunakan oleh Oracle, yang kemudian dikembangkan lagi menjadi PL/pgSQL yang digunakan PostgreSQL.

Cukup membingungkan, bukan? Untungnya konsep dan elemen-elemen dasar dalam SQL seperti  statement, query, expression, ataupun clause tetap berlaku umum pada setiap SQL extension.

Kita cukupkan pembahasan teori sampai di sini, berikut adalah beberapa optimasi sederhana yang dapat Anda lakukan, untuk setidaknya memperbaiki atau mencegah permasalahan, dan meningkatkan performa RDBMS Anda.

Index

Optimasi pertama yang kita bahas adalah permasalahan index, tentu Anda mengetahui bahwa index dapat meningkatkan kecepatan pencarian pada record yang diinginkan. Tetapi, Anda harus cukup selektif dalam memilih ?eld yang perlu di-index, karena tidak semua ?eld memerlukannya.

Ibaratnya membaca buku, proses pencarian atau scan akan membaca dari awal hingga akhir halaman. Pada ?eld yang di-index, pencarian dilakukan secara index scan, atau membaca pada index, tidak langsung pada table yang bersangkutan.

Sementara pencarian yang dilakukan langsung dengan membaca record demi record pada table disebut dengan table scan.

Apakah index scan selalu lebih cepat dibandingkan dengan table scan? Ternyata tidak juga, table scan bisa jadi bekerja lebih cepat saat mengakses record dalam jumlah relatif kecil, ataupun pada saat aplikasi memang memerlukan pembacaan table secara keseluruhan.

Sebaliknya dalam mengakses record yang besar pada ?eld tertentu, index scan dapat mengurangi operasi pembacaan I/O sehingga tidak jarang menghasilkan kinerja yang lebih cepat.

Sebagai patokan, Anda dapat menentukan index pada ?eld yang sering digunakan, misalnya ?eld yang sering diakses oleh klausa WHERE, JOIN, ORDER BY, GROUP BY.

Menentukan Tipe Data

Tipe data merupakan permasalahan yang gampang-gampang susah. Dari sisi daya tampung, tipe data yang terlalu kecil atau sebaliknya terlalu besar bagi suatu ?eld, dapat menimbulkan bom waktu yang menimbulkan masalah seiring dengan pertambahan data yang pesat setiap harinya.

Menentukan tipe data yang tepat memerlukan ketelitian dan analisa yang baik. Sebagai contoh, kita perlu mengetahui kapan kita menggunakan tipe data char atau varchar.

Keduanya menampung karakter, bedanya char menyediakan ukuran penyimpanan yang tetap (?  xed-length), sedangkan varchar menyediakan ukuran penyimpanan sesuai dengan isi data (variable-length).

Patokan umum adalah menggunakan tipe data char jika ?  eld tersebut diperuntukkan untuk data dengan panjang yang konsisten. Misalnya kode pos, bulan yang terdiri dari dua digit (01 sampai 12), dan seterusnya. Varchar digunakan jika data yang ingin disimpan memiliki panjang yang bervariasi, atau gunakan varchar(max) jika ukurannya melebihi 8000 byte.

Jangan Izinkan Allow Null

Jika memungkinkan, kurangi penggunaan ?eld yang memperbolehkan nilai null. Sebagai gantinya, Anda dapat memberikan nilai default pada ?eld tersebut.

Nilai null kadang rancu dalam intepretasi programer dan dapat mengakibatkan kesalahan logika pemrograman. Selain itu, ?eld null mengonsumsi byte tambahan sehingga menambah beban pada query yang mengaksesnya.

Query yang Mudah Terbaca

Karena SQL merupakan bahasa declarative, maka tidak mengherankan jika Anda membuat query berbentuk kalimat nan panjang walaupun mungkin hanya untuk keperluan menampilkan satu ?eld!

Jangan biarkan query Anda susah dibaca dan dipahami, kecuali Anda memang berniat membuat pusing siapapun yang melihat query Anda. Query panjang yang ditulis dalam 1baris jelas akan menyulitkan modi?  kasi dan pemahaman, akan jauh lebih baik jika Anda menuliskan query dalam format yang mudah dicerna.

Pemilihan huruf besar dan kecil juga dapat mempermudah pembacaan, misalnya dengan konsisten menuliskan keyword SQL dalam huruf kapital, dan tambahkan komentar bilamana diperlukan.

Hindari SELECT *

Select mungkin merupakan keyword yang paling sering digunakan, karena itu optimasi pada perintah  SELECT sangat mungkin dapat memperbaiki kinerja aplikasi secara keseluruhan. \

SELECT * digunakan untuk melakukan query semua ?eld yang terdapat pada sebuah table, tetapi jika Anda hanya ingin memproses ?eld tertentu, maka sebaiknya Anda menuliskan ?eld yang ingin diakses saja, sehingga query Anda menjadi SELECT ?eld1, ?eld2, ?eld3 dan seterusnya (jangan pedulikan kode program yang menjadi lebih panjang!). Hal ini akan mengurangi beban lalu lintas jaringan dan lock pada table, terutama jika table tersebut memiliki banyak ?eld dan berukuran besar.

Batasi ORDER BY

Penggunaan ORDER BY  yang berfungsi untuk mengurutkan data, ternyata memiliki konsekuensi menambah beban query, karena akan menambah satu proses lagi, yaitu proses sort.

Karena itu gunakan ORDER BY hanya jika benar-benar dibutuhkan oleh aplikasi Anda.

Atau jika dimungkinkan, Anda dapat melakukan pengurutan pada sisi client dan tidak pada sisi server. Misalnya dengan menampung data terlebih dahulu pada komponen grid dan melakukan sortir pada grid tersebut sesuai kebutuhan pengguna.

Subquery Atau JOIN

Adakalanya sebuah instruksi dapat dituliskan dalam bentuk subquery atau perintah JOIN, disarankan Anda memprioritaskan penggunaan JOIN karena dalam kasus yang umum akan menghasilkan performa yang lebih cepat.

Walaupun demikian, mengolah query merupakan suatu seni, selalu ada kemungkinan ternyata subquery bekerja lebih cepat dibandingkan JOIN, misalnya dalam kondisi penggunaan

JOIN yang terlalu banyak, ataupun logika query yang belum optimal.

Gunakan WHERE dalam SELECT

“Di mana ada gula di sana ada semut”. Untuk programer database, pepatah itu perlu dimodi?  kasi menjadi “di mana ada SELECT di sana ada WHERE”, untuk mengingatkan pentingnya klausa WHERE sebagai kondisi untuk menyaring record sehingga meminimalkan beban jaringan.

Saat sebuah table dengan jumlah data yang sangat besar diproses, juga terjadi proses lock terhadap table tersebut sehingga menyulitkan pengaksesan table yang bersangkutan oleh pengguna yang lain.

Bahkan jika Anda bermaksud memanggil seluruh record, tetap menggunakan WHERE merupakan kebiasaan yang baik.

Jika Anda telah menggunakan WHERE pada awal query, maka kapanpun Anda ingin menambahkan kondisi tertentu, Anda tinggal menyambung query tersebut dengan klausa AND diikuti kondisi yang diinginkan.

Tapi bagaimana menggunakan WHERE jika benar-benar tidak ada kondisi apapun? Anda dapat menuliskan suatu kondisi yang pasti bernilai true, misalnya SELECT …. WHERE 1=1. Bahkan tools open source phpMyAdmin yang berfungsi untuk mena  ngani database MySQL selalu menyertakan default klausa WHERE 1 pada perintah SELECT, di mana angka 1 pada MySQL berarti nilai true.

Kecepatan Akses Operator

WHERE 1=1 dan WHERE 0 <> 1 sama-sama merupakan kondisi yang menghasilkan nilai true. Tetapi, dalam hal ini lebih baik Anda menggunakan WHERE 1=1 daripada WHERE 0 <> 1. Hal ini dikarenakan operator = diproses lebih cepat dibandingkan dengan operator <>.

Dari sisi kinerja, urutan operator yang diproses paling cepat adalah:

1. =

2. >, >=, <. <=

3. LIKE

4. <>

Tidak dalam setiap kondisi operator dapat disubtitusikan seperti contoh sederhana di atas, tetapi prioritaskanlah penggunaan operator yang tercepat.

Membatasi Jumlah Record

Bayangkan Anda menampilkan isi sebuah table dengan menggunakan SELECT, dan ternyata table tersebut memiliki jutaan record yang sangat tidak diharapkan untuk tampil seluruhnya.

Skenario yang lebih buruk masih dapat terjadi, yaitu query tersebut diakses oleh ratusan pengguna lain dalam waktu bersamaan!

Untuk itu, Anda perlu membatasi jumlah record yang berpotensi mengembalikan record dalam jumlah besar (kecuali memang benar-benar dibutuhkan), pada SQL Server, Anda dapat menggunakan operator TOP di dalam perintah SELECT.

Contohnya SELECT TOP 100 nama…  akan menampilkan 100 record teratas ?eld nama.

Jika menggunakan MySQL, Anda dapat menggunakan LIMIT untuk keperluan yang sama.

Batasi Penggunaan Function

Gunakan fungsi-fungsi yang disediakan SQL seperlunya saja.

Sebagai contoh, jika Anda menemukan query sebagai berikut: SELECT nama FROM tbl_teman WHERE ucase(nama) = ‘ABC’, nampak query tersebut ingin mencari record yang memiliki data berisi “abc”, fungsi ucase digunakan untuk mengubah isi ?eld nama menjadi huruf besar dan dibandingkan dengan konstanta “ABC” untuk meyakinkan bahwa semua data “abc” akan tampil, walaupun dituliskan dengan huruf kecil, besar, ataupun kombinasinya.

Tetapi, cobalah mengganti query tersebut menjadi SELECT nama FROM tbl_teman WHERE nama = ‘ABC’, perhatikan query ini tidak menggunakan  function ucase. Apakah menghasilkan result yang sama dengan query pertama? Jika pengaturan database Anda tidak case-sensitive (dan umumnya secara default memang tidak case-sensitive), maka hasil kedua query tersebut adalah sama. Artinya, dalam kasus ini Anda sebenarnya tidak perlu menggunakan function ucase!

Baca dari Kiri ke Kanan

Query yang Anda tulis akan diproses dari kiri ke kanan, misalkan terdapat query WHERE kondisi1 AND kondisi2 AND kondisi3, maka kondisi1 akan terlebih dahulu dievaluasi, lalu kemudian kondisi2, kondisi3, dan seterusnya. Tentunya dengan asumsi tidak ada kondisi yang diprioritaskan/dikelompokkan dengan menggunakan tanda kurung.

Logika operator AND akan langsung menghasilkan nilai false saat ditemukan salah satu kondisi false, maka letakkan kondisi yang paling mungkin memiliki nilai false pada posisi paling kiri. Hal ini dimaksudkan agar SQL tidak perlu lagi mengevaluasi kondisi berikutnya saat menemukan salah satu kondisi telah bernilai false.

Jika Anda bingung memilih kondisi mana yang layak menempati posisi terkiri karena kemungkinan falsenya sama atau tidak bisa diprediksi, pilih kondisi yang lebih sederhana untuk diproses.

Gambar dalam Database

Database memang tidak hanya diperuntukkan sebagai penyimpanan teks saja, tetapi dapat juga berupa gambar. Kalau pepatah mengatakan sebuah gambar bermakna sejuta kata, tidak berarti kita harus menyediakan tempat penyimpanan seukuran sejuta kata untuk menampung satu gambar! Akan lebih baik bagi kinerja database jika Anda hanya menyimpan  link ataulokasi gambar di dalam database, dibandingkan menyimpan ?sik gambar tersebut.

Kecuali jika Anda tidak memiliki pilihan lain, misalnya karena alasan keamanan atau tidak tersedianya tempat penyimpanan lain untuk gambar Anda selain di dalam database.

Tetapi, jelas jika Anda dapat memisahkan gambar secara ?sik dari database, maka ukuran dan beban database akan relatif berkurang drastis, proses seperti back-up dan migrasi akan lebih mudah dilakukan.

Pengukuran Kinerja

Terdapat  tools optimizer yang bervariasi untuk tiap RDBMS, Anda dapat menggunakannya sebagai panduan untuk meningkatkan kinerja query, di mana Anda dapat mengetahui berapa lama waktu eksekusi atau operasi apa saja yang dilakukan sebuah query.

Jika Anda menemukan sebuah query tampak tidak optimal, berusahalah menulis ulang query tersebut dengan teknik dan metode yang lebih baik. Semakin banyak query yang dapat dioptimasi, akan semakin baik kinerja aplikasi Anda. Terutama saat frekuensi pemakaian query tersebut relatif tinggi.

Back-up

Buatlah back-up otomatis secara periodik, sebaiknya tes dan simulasikan prosedur restore database dan perhitungkan waktu yang diperlukan untuk membuat sistem pulih kembali jika terjadi sesuatu yang tidak diharapkan pada database.

Lakukan proses back-up pada waktu di mana aktivitas relatif rendah agar tidak mengganggu kegiatan operasional.

Banyak Jalan Menuju Roma

Berikan satu masalah pada beberapa programer, maka Anda mungkin akan mendapatkan beberapa solusi yang berbedabeda. Banyak alternatif yang dapat diciptakan untuk menghasilkan sesuatu, tetapi tentunya kita menginginkan alternatif yang terbaik.

Karena itu, jangan ragu mencoba menuliskan ulang query Anda dengan cara lain jika Anda melihat kemungkinan peningkatan kinerja, contohnya pada potongan query berikut:

WHERE SUBSTRING(nama,1,1) =’b’

Query di atas akan mengambil record dengan kondisi karakter pertama kolom nama adalah “b”, sehingga akan tampil isi record seperti “Budi”, “Badu”, “Benny” dan seterusnya. Cara lain untuk menghasilkan record yang sama adalah sebagai berikut:

WHERE nama LIKE ‘b%’

Hasil yang ditampilkan kedua query tersebut akan sama, tetapi performa yang dihasilkan (terutama untuk record berukuran besar) akan berbeda.  Umumnya kondisi LIKE akan bekerja dengan lebih cepat dibandingkan function SUBSTRING.

Contoh lain yang lebih kompleks adalah seperti query beri-kut:

SELECT NIP, nama FROM tbl_pegawai WHERE dept = ‘IT’ OR kota

= ‘jakarta’ OR divisi = ‘programer’

Perhatikan query di atas memiliki tiga kondisi yang dipisahkan oleh klausa OR. Alternatif lain adalah dengan menuliskan query sebagai berikut:

SELECT NIP, nama FROM tbl_pegawai WHERE dept = ‘IT’

UNION ALL

SELECT NIP, nama FROM tbl_pegawai WHERE kota = ‘jakarta’

UNION ALL

SELECT NIP, nama FROM tbl_pegawai WHERE divisi = ‘programer’

Walaupun penulisan query menjadi lebih panjang, bisa jadi al-ternatif ini akan lebih baik. Mengapa? Dengan asumsi ?eld dept memiliki index, sementara ?eld kota dan divisi tidak diindex, query pertama tidak akan menggunakan index dan melakukan table scan. Berbeda dengan query kedua, index akan tetap dilakukan pada sebagian query sehingga akan menghasilkan kinerja yang relatif lebih baik.

Ah… Beda Tipis Saja!

Pastinya masih banyak terdapat teknik lain yang tidak akan dapat dibahas semuanya dalam artikel ini. Di antara (atau mungkin semua) teknik optimasi yang dibahas di atas, mungkin Anda akan menemukan bahwa setelah diuji dengan data sampel maka kinerja sebelum dan sesudah optimasi ternyata sama sekali tidak signi?kan, beda tipis, atau tidak ada bedanya sama sekali!

Memang benar, dengan spesi?  kasi hardware yang semakin meningkat, data yang relatif kecil, dan alur yang sederhana, Anda mungkin tidak akan mendapatkan perbedaan yang signi?kan.

Tetapi jika Anda siap untuk terjun menghadapi tantangan menangani aplikasi yang lebih besar, maka perbedaan antara tanpa dan dengan optimasi akan sangat nyata, dengan pema-haman dan kebiasaan  coding yang baik, Anda akan dapat menghasilkan aplikasi yang juga lebih baik.

Tidak ada salahnya menerapkan optimasi yang Anda ketahui sedini mungkin dalam pengembangan sistem aplikasi Anda.

Bahkan jika sebuah aplikasi tnampaknya memiliki kinerja yang cukup baik, tidak berarti lepas dari usaha optimasi lebih lanjut.

Terutama jika Anda mengharapkan aplikasi tersebut mampu berkembang lebih jauh, tidak pernah ada kata sempurna bagi suatu sistem aplikasi, tetapi setiap sistem selalu ada kesempatan menjadi lebih berguna. Salah satunya dengan selalu mencari cara yang lebih baik

LEBIH LANJUT

·         http://blog.sqlauthority.com/

·         http://blogs.msdn.com/queryoptteam/

·         http://www.sql-server-performance.com/


Source : PCMedia


Informasi Jalur Akses Query
Pada Database Oracle, informasi untuk melihat jalur akses yang akan digunakan untuk eksekusi database saat melakukan query dapat dilihat dengan menggunakan perintahexplain plain. Informasi ini disimpan dalam tabel PLAN_TABLE yang terdapat di schema user yang mengeksekusi perintah tersebut.
Sebelum melakukan perintah explain plan, terlebih dahulu buat table PLAN_TABLE dengan menggunakan script utlxplan.sql yang diambil dari \%ORACLE_HOME%\RDBMS\ADMIN.

Setelah itu table PLAN_TABLE dapatdigunakan seperti contoh berikut :
SQL>explain plan
Set statement_id=’test1’
Into plan_table for
Select * from karyawan where gaji=2000000;
Dalam PLAN_TABLE rencana eksekusi diatas dikenal dengan nama test1 yang terdefinisikan pada kolom statement_id.


Untuk melihat rencana eksekusi dari test1, digunakan perintah SELECT berikut :











Contoh hasil dari eksekusi query tersebut :














Output tersebut dibaca mulai dari  yang  menjorok paling dalam yaitu : TABLE ACCESS FULL KARYAWAN. Dikarenakan klausa WHERE melibatkan kolom gaji namun kolom gaji tidak ada index-nya, maka Oracle melakukan full table scan. Setelah seluruh table karyawan selesai dibaca, selanjutnya adalah SELECT STATEMENT yang berfungsi untuk menampilkan hasil query.


Faktor-faktor yang berpengaruh terhadap kecepatan Akses Data


Optimasi Aplikasi

Dalam pembuatan aplikasi, yang perlu mendapat perhatian adalah apakah akses terhadap data sudah efisien. Efisien dalam hal penggunaan obyek yang mendukung kecepatan akses, seperti index atau cluster. Kemudian juga bagaimana cara database didesain. Apakah desain database sudah melakukan normalisasi data secara tepat. 

Kadangkala normalisasi sampai level yang kesekian, tidak menjamin suatu desain yang efisien. Untuk membuat desain yang lebih tepat, kadang setelah melakukan normalisasi perlu dilakukan denormalisasi. Misalnya tabel yang hubungannya one-toone dan sering diakses bersama lebih baik disatukan dalam satu tabel. 

Cluster dan Index

Cluster adalah suatu segment yang menyimpan data dari tabel yang berbeda dalam suatu struktur fisik disk yang berdekatan. Konfigurasi ini bermanfaat untuk akses data dari beberapa tabel yang sering di-query. Penggunaan cluster secara tepat dilaksanakan setelah menganalisa tabel-tabel mana saja yang sering di-query secara bersamaan menggunaan perintah SQL join.

Jika aplikasi sering melakukan query dengan menggunakan suatu kolom yang berada pada klausa WHERE, maka harus digunakan index yang melibatkan kolom tersebut. Penggunaan index yang tepat bergantung pada jenis nilai yang terdapat dalam kolom yang akan diindex. Dalam RDBMS Oracle, index B-Tree digunakan untuk kolom yang mengandung nilai yang cukup bervariasi, sedangkan untuk nilai yang tidak memiliki variasi cukup banyak, lebih baik menggunakan index bitmap.