Selasa, 22 Oktober 2013

OPTIMASI QUERY - Informasi Jalur Akses Query

OPTIMASI QUERY - 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 :
SELECT LPAD (‘’,2*Level) | | Operation| |’ ‘| | Options| |’ ‘| | Object_Name Q_Plan
FROM plan_table
WHERE statement_id=’test1’
CONNECT BY PRIOR id=parent_id AND statement_id=’test1’
START WITH id=0 AND statement_id=’test1’;
Contoh hasil dari eksekusi query tersebut :
Q_PLAN  
                        SELECT STATEMENT
                        TABLE ACCESS FULL KARYAWAN

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.

Rabu, 09 Oktober 2013

OPTIMASI QUERY - Optimasi Perintah SQL

Cara mengoptimalkan perintah SQL tidak cukup dengan mendesain aplikasinya saja. Dalam mendesain database, seringkali lokasi fisik di nomor duakan. Terlebih hanya fokus terhadap desain logik saja. Padahal untuk menampilkan hasil query dibutuhkan pencarian yang melibatkan struktur fisik penyimpanan data. Intinya dalam mengoptimalkan query adalah dengan meminimalkan “jalur” pencarian untuk menemukan data yang disimpan dalam lokasi fisik.

Penggunaan index yang tidak tepat untuk kerja, tidak akan meningkatkan kecepatan akses data. Hal tersebut dikarenakan index pada database digunakan untuk meningkatkan kecepatan akses data. Cara kerjanya, pada saat query dijalankan, index mencari data dan menentukan nilai ROWID yang membantu menemukan lokasi data secara fisik di disk.

Misal digunakan index yang melibatkan tiga buah kolom yang mengurutkan kolom menurut kota, provinsi, dan kode pos dari tabel karyawan, sebagai berikut :

CREATE INDEX idx_kota_prov_kodepos
ON karyawan(kota,provinsi,kode_pos)
TABLESPACE INDX;

Kemudian user melakukan query sebagai berikut :
SELECT* FROM karyawan WHERE provinsi=’Jawa Barat’;

Pada saat melakukan query tersebut, index tidak akan digunakan karena kolom pertama (kota) tidak digunakan dalam klausa WHERE. Jika user sering melakukan query ini, maka kolom index harus diurutkan menurut provinsi. Selain itu, proses pencarian data akan lebih cepat jika data terletak pada block tabel yang berdekatan daripada harus mencari dibeberapa data file yang terletak pada block yang berbeda.

Misal pada perintah SQL berikut ini :
SELECT* FROM karyawan
WHERE id BETWEEN 1010 and 2010;

Query di atas akan melakukan “scan” terhadap sedikit data block jika tabel karyawan diatas diurutkan berdasarkan kolom id. Untuk mengurutkan berdasarkan kolom yang berbeda-beda maka tabel disimpan dalam flat file, kemudian tabel diekspor dan diurutkan sesuai kebutuhan.
Alternatif yang lain, bisa digunakan perintah untuk membuat tabel lain yang memiliki urutan yang berbeda dari tabel asal, seperti perintah SQL berikut :


CREATE TABLE karyawan_urut
AS SELECT* FROM karyawan
ORDER BY id;

Pada SQl diatas, tabel karyawan_urut berisi data yang sama dengan tabel karyawan hanya datanya terurut berdasarkan kolom id.

OPTIMASI QUERY - 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 :

SELECT LPAD(‘’,2*Level)| |Operation| |’ ‘| |Options| |’ ‘| |Object_Name Q_Plan
FROM plan_table
WHERE statement_id=’test1’
CONNECT BY PRIOR id=parent_id AND statement_id=’test1’
START WITH id=0 AND statement_id=’test1’;

Contoh hasil dari eksekusi query tersebut :

Q_PLAN

SELECT STATEMENT


            TABLE ACCESS FULL KARYAWAN


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.

Optimalisasi SQL Query

Belakangan ini performa MySQL agak menurun, gara-gara nggak bisa nambah memori di hosting (xixixi memori mahal banget), jadi mau nggak mau harus optimasi hal lainnya selain hardware. Ini sih sebenernya mental note aja, tapi mungkin artikel tuning mysql ini manfaatnya bagi yang membaca blog saya (tentunya yang ngerti MySQL).

Akhirnya nemu juga nih video di Google, yang judulnya Performance Tuning Best Practice for MySQL. Warning: bukan untuk pemula lho, Anda harus tau tentang basic SQL dan cara kerja MySQL.

PS: Wah nonton video ini kayak mengulang kembali kuliah dalam 40 menit hehehehe.

Kasus INSERT:

Beberapa hari yang lalu saya coba untuk melakukan insert (2.6jt row) ke dalam tabel MyISAM (jangan tanya ya data segede itu buat apaan hehehe). Untung sih pake MyISAM, jadi ini yang saya lakukan supaya lebih cepet masuknya (lumayan cepet kurang dari 3 menitan di laptop). Jadi ini yang saya lakukan:

   1. Drop index. Biar cepet dah.

   2. Pake bulk insert. Buat yang ga tau sih syntaxnya:

      INSERT INTO tablename VALUES (...,...),(...,...),dst.

   3. Masukin lagi indexnya. Beres dah.

    Kesimpulan: Kenapa bisa cepet? Soalnya index di drop + pake bulk insert daripada pake
for-loop.

Kasus SELECT:

Kalo yang ini lain lagi, tergolong mudah sih (kecuali kalo mau optimasi index…bah satu buku sendiri tuh). Gara-gara udah 1.2jt-an row, mesti optimasi indexing. Ini sih yang saya lakuin buat optimasi index:

   1. Hidupin slow log query.

   2. Monitor deh apa aja yang slow SQLnya.

   3. Tambahin index-index mana yang perlu ditambah. Buat ngecek apakah query make
 index bisa dilihat pake syntax EXPLAIN.

    4. Hidupin Query Cache.

    Kesimpulan: Kenapa bisa cepet? Soalnya mengcover index-index yang diperlukan buat mempercepat pembacaan tabel untuk query. Query Cache digunakan untuk menyimpan query-query yang berulang-ulang sehingga MySQL tinggal membaca query cache ini daripada memproses kembali query.

Optimasi Query

A.            Optimasi pada Perintah SQL

Desain aplikasi saja tidak cukup untuk meningkatkan kinerja yang harus didukung sengan optimasi dari perintah SQL yang digunakan pada aplikasi tersebut. Dalam mendesain database, seringkali lokasi fisik data terabaikan. Karena hanya desain logik saja yang diperhatikan. Padahal untuk menampilkan hasil query dibutuhkan pencarian yang melibatkan struktur fisik penyimpanan data. Inti dari optimasi query adalah meminimalkan jalur pencarian untuk menemukan data yang disimpan dalam lokasi fisik.

B.      Perencanaan Eksekusi

Pada database Oracle, informasi ini dapat dilihat dengan menggunakan perintah explain plan, yang akan memberi informasi tentang rencana eksekusi dari suatu query. Informasi ini disimpan dalam tabel PLAN_TABLE yang terdapat di skema user yang mengeksekusi perintah tersebut.

C.      Faktor Lain yang berpengaruh terhadap Kecepatan Akses Data

Faktor lain yang berpengaruh terhadap kecepatan akses data, tidak hanya terletak pada optimasi perintah SQL, tetapi terhadap hal-hal lain yang berpengaruh. Diantaranya adalah optimasi aplikasi dan penggunaan cluster dan index.

D.      Optimasi Aplikasi

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

E.       Cluster dan Index

Cluster adalah suatu segmen 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 menggunakan perintah SQL.

Senin, 22 Oktober 2012

ALJABAR BOOLEAN

DEFINISI ALJABAR BOOLEAN
Misalkan terdapat
- Dua operator biner: + dan ⋅
 - Sebuah operator uner: ’.
 - B : himpunan yang didefinisikan pada operator +, ⋅, dan ’
 - 0 dan 1 adalah dua elemen yang berbeda dari B.
 Tupel (B, +, ⋅, ’)
disebut aljabar Boolean jika untuk setiap a, b, c B berlaku aksioma-aksioma atau postulat Huntington berikut:
1.      Closure: (i) a + b B
(ii) a b B
2.      Identitas: (i) a + 0 = a
 (ii) a ⋅ 1 = a
3.      Komutatif: (i) a + b = b + a
 (ii) a b = b . a
4.      Distributif:(i) a ⋅ (b + c) = (a b) + (a c)
(ii) a + (b c) = (a + b) ⋅ (a + c)
5.      Komplemen1: (i) a + a’ = 1
 (ii) a a’ = 0

 ALJABAR BOOLEAN DUA-NILAI
Aljabar Boolean dua-nilai:
- B = {0, 1}
 - operator biner, + dan ⋅
 - operator uner, ’
 - Kaidah untuk operator biner dan operator uner:
 
Cek apakah memenuhi postulat Huntington:
1. Closure : jelas berlaku
2. Identitas: jelas berlaku karena dari tabel dapat kita lihat bahwa:
(i) 0 + 1 = 1 + 0 = 1
(ii) 1 ⋅ 0 = 0 ⋅ 1 = 0
3. Komutatif: jelas berlaku dengan melihat simetri tabel operatorbiner
4. Distributif:
(i) a ⋅ (b + c) = (a b) + (a c) dapat ditunjukkan benar dari tabel operator biner di atas dengan membentuk tabel kebenaran:


(ii) Hukum distributif a + (b c) = (a + b) ⋅ (a + c) dapat ditunjukkan benar dengan membuat tabel kebenaran dengancara yang sama seperti (i).



5. Komplemen:
 (i) a + a‘ = 1, karena 0 + 0’= 0 + 1 = 1 dan 1 + 1’= 1 + 0 = 1
(ii) a a = 0, karena 0 ⋅ 0’= 0 ⋅ 1 = 0 dan 1 ⋅ 1’ = 1 ⋅ 0 = 0

Karena kelima postulat Huntington dipenuhi, maka terbukti bahwaB = {0, 1} bersama-sama dengan operator biner + dan ⋅operator komplemen ‘ merupakan aljabar Boolean

EKSPRESI BOOLEAN
o   Misalkan (B, +, ⋅, ’) adalah sebuah aljabar Boolean. Suatuekspresi Boolean dalam (B, +, ⋅, ’) adalah: (i) setiap elemen di dalam B, (ii) setiap peubah, (iii) jika e1 dan e2 adalah ekspresi Boolean, maka e1 + e2, e1 ⋅e2, e1’ adalah ekspresi Boolean
Contoh: 0
1
 a
 b
a + b
 a b
a’⋅ (b + c)
 a b’ + a b c’ + b’, dan sebagainya

o   Dua ekspresi Boolean dikatakan ekivalen(dilambangkan dengan ‘=’) jika keduanya mempunyai nilai yang sama untuksetiap pemberian nilai-nilai kepada n peubah. Contoh:
 a ⋅ (b + c) = (a . b) + (a c)


HUKUM-HUKUM ALJABAR BOOLEAN
FUNGSI BOOLEAN
Fungsi Boolean(disebut juga fungsi biner) adalah pemetaandari Bn ke Bmelalui ekspresi Boolean, kita menuliskannyasebagai f : Bn B yang dalam hal ini Bnadalah himpunan yang beranggotakanpasangan terurut ganda-n (ordered n-tuple) di dalam daerah asal B.
Setiap ekspresi Boolean tidak lain merupakan fungsiBoolean.
Misalkan sebuah fungsi Boolean adalah f(x, y, z) = xyz + xy + yz
 Fungsi f memetakan nilai-nilai pasangan terurut ganda-3 (x, y, z) ke himpunan {0, 1}. Contohnya,
(1, 0, 1) yang berarti x = 1, y = 0, dan z = 1 sehingga f(1, 0, 1) = 1 ⋅ 0 ⋅ 1 + 1’ ⋅ 0 + 0’⋅ 1 = 0 + 0 + 1 = 1 .

BENTUK KANONIK
Ada dua macam bentuk kanonik:
1. Penjumlahan dari hasil kali (sum-of-product atau SOP)
2. Perkalian dari hasil jumlah (product-of-sum atau POS)
 Contoh:
1. f(x, y, z) = xyz + xyz’ + xyz → SOP Setiap suku (term) disebut minterm
2. g(x, y, z) = (x + y + z)(x + y’ + z)(x + y’ + z’) (x’ + y + z’)(x’ + y’ + z) → POS Setiap suku (term) disebut maxterm
 Setiap minterm/maxterm mengandung literal lengkap





Contoh :
Nyatakan tabel kebenaran di bawah ini dalam bentuk kanonik SOP dan POS.
Penyelesaian:
(a)    SOP
Kombinasi nilai-nilai peubah yang menghasilkan nilai fungsisama dengan 1 adalah 001, 100, dan 111, maka fungsiBooleannya dalam bentuk kanonik SOP adalah
f(x, y, z) = xyz + xyz’ + xyz
atau
(dengan menggunakan lambang minterm), f(x, y, z) = m1 + m4 + m7 = Σ (1, 4, 7)

(b)   POS
Kombinasi nilai-nilai peubah yang menghasilkan nilai fungsisama dengan 0 adalah 000, 010, 011, 101, dan 110, makafungsi Booleannya dalam bentuk kanonik POS adalah

f(x, y, z) = (x + y + z)(x + y’+ z)(x + y’+ z’) (x’+ y + z’)(x’+ y’+ z)
atau dalam bentuk lain,
 f(x, y, z) = M0 M2 M3 M5 M6 = Π(0, 2, 3, 5, 6)

 PENYEDERHANAAN FUNGSI BOOLEAN
Contoh.
 f(x, y) = xy + xy’ + y
disederhanakan menjadi
f(x, y) = x’ + y
 Penyederhanaan fungsi Boolean dapat dilakukan dengan 3 cara:
1. Secara aljabar
2. Menggunakan Peta Karnaugh
3. Menggunakan metode Quine Mc Cluskey (metode Tabulasi)


1. PenyederhanaanSecaraAljabar
Contoh:
1.      f(x, y) = x + xy
= (x + x’)(x + y)
 = 1 ⋅ (x + y )
= x + y
2.      f(x, y, z) = xyz + xyz + xy
 = xz(y’ + y) + xy
 = xz + xz

3.      f(x, y, z) = xy + xz + yz
 = xy + xz + yz(x + x’)
= xy + xz + xyz + xyz
= xy(1 + z) + xz(1 + y)
 = xy + xz


2.PetaKarnaugh
a. Peta Karnaugh dengan dua peubah 
b. Peta dengan tiga peubah


c. Peta dengan empat peubah



Senin, 08 Oktober 2012

FUNGSI MATEMATIKA DISKRIT

      Dalam matematika diskrit konsep fungsi sangat penting, dimana fungsi merupakan relasi yang mempunyai syarat setiap anggota dari daerah definisi (domain) mempunyai pasangan tepat satu anggota dari daerah Hasil (codomain).

DEFINISI FUNGSI

Fungsi merupakan jenis khusus dari relasi. fungsi disebut juga sebagai pemetaan atau transformasi.
Diberikan dua himpunan A dan B, relasi biner f dari himpunan A ke B merupakan suatu fungsi jika setiap elemen di dalam himpunan A mempunyai pasangan tepat satu elemen himpunan B.
Apabila f adalah fungsi dari himpunan A ke B maka notasi fungsinya
f : A
B
Himpunan A disebut daerah definisi(domain) dan himpunan B disebut daerah hasil (codomain).
 Setiap domain tidak boleh mempunyai pasangan ganda. 

Contoh Fungsi :
               

f : A à B                                                                         f : A à B
A : {a,b,c,d}                                                                A : {a,b,c,d}
B : {1,2,3,4,5}                                                             B : {1,2,3}
f : {(a,1),(b,2),(c,4),(d,5)}                                          f : {(a,1),(b,2),(c,2),(d,3)}


Contoh yang buka Fungsi :


                


keduanya bukan merupakan sebuah fungsi karena di daerah domainnya tidak memiliki pasangan ataupun 1 domain memiliki pasangan ganda.



TERAPAN FUNGSI :

1. Formula pengisian nilai dalam bahasa pemrograman dinyatakan dengan assignment
Contoh diberikan rumusan fungsi f(x) = x2 +1 , f(x) = x +1 , apabila tidak didefinisikan secara khusus tentang daerah definisi maka daerah definisi dan daerah hasil adalah himpunan Himpunan bilangan riil misal R.
Dalam himpunan pasangan terurut fungsi didefinisikan sbb:
f = { (x1, x2}/ x 
 R }

2. Kode program ( source code)

Fungsi yang dispesifikasikan dalam bahasa Pascal
Function abs(x: integer): integer;
Begin
if x < 0 then
abs := -x
else
abs := x;
end;
Relasi f = {(1,a),(2,b),(3,c) }dari himpunan A ke B, {1,2,3} 
 A dan {a,b,c} B merupa kan fungsi karena Relasi f memasangkan tepat satu anggota himpunan A dengan anggota himpunan B
Keterangan :
f(1) = a, f (2) = b dan f (3) = c
Himpunan A disebut daerah definisi dan himpunan B sebagai daerah hasil.



JENIS FUNGSI


  • Fungsi Satu-satu (One-to-one)
Fungsi ini disebut koresponden satu-satu atau juga disebut injektif, jika dan hanya jika f(x)=f(y) , dimana x=y, untuk setiap x, dan y pada domain f. akan tetapi pada fungsi injektif ketika x≠y mengakibatkan f(x)≠f(y).

koresponden bukan satu-satu.

  • Fungsi Naik Turun
Fungsi disebut naik ketika fungsi f memiliki nilai domain dan kodomain subhimpunan dari bilangan real, jika f(x) < f(y) ketika x < y , dan nilai y merupakan anggota domain dari f, sedangkan fungsi disebut turun jika f(x) > f(y) , ketika x < y, untuk x,  dan y adalah anggota domain dari f.
  • Dipetakan Pada (Onto)

Merupakan fungsi satu-satu maupun onto.
beberapa contoh gambar fungsi.

  • Fungsi Identitas
A merupakan sebuah himpunan, lalu fungsi identitas pada A adalah fungsi iA : A àA dan hal itu berlaku ketika i(x) = x, untuk setiap himpunan x є A.
  • Fungsi Invers
merupakan fungsi kebalikan, yang asalnya f(a) = b, maka inversnya adalah fˉˈ(b) = a
  • Fungsi Komposisi
dimisalkan fungsi g merupakan fungsi dari himpunan A ke B, notasi penulisannya adalah (f o g)(x) = f(g(x))


BEBERAPA FUNGSI KHUSUS

Beberapa fungsi khusus yang sering digunakan dalam bahasa pemrograman seperti fungsi floor, ceiling, modulo, faktorial, perpangkatan dan logaritmik.

1.Fungsi floor dan ceiling


Fungsi ini diperlukan untuk membulatkan ke bawah dan keatas. Fungsi floor diperlukan untuk membulatkan nilai pecahan kebawah, misalkan x bilangan riil maka bilangan floor dilambangkan x. Fungsi ceiling diperlukan untuk membulatkan nilai pecahan keatas dan dilambangkan 
x.

2.Fungsi Modulo

Fungsi modulo adalah fungsi dengan operator mod, misalkan b sembarang bilangan bulat dan m bilangan bulat positip maka b mod memberikan sisa pembagian bilangan bulat apabila b dibagi dengan m .


3.Fungsi hash


Misalkan dipunyai sel-sel pada memori komputer yang diberi indek dari 0 sampai dengan 10.


4.Fungsi faktorial


Untuk sembarang bilangan bulat non negatif n, faktorial dari n dilambangkan dengan n ! yang didefinisikan.