Limit, Limit, Limit
Salah satu alasan mengapa MYSQL sangat cocok untuk aplikasi Web adalah karena mendukung klausa LIMIT. Karena untuk membatasi jumlah record hasil yang diinginkan dalam satu perintah SQL. Juga didukung oleh database lain seperti PostgreSQL, Firebird dan funsional LIMIT.
Tipe Data
Seorang programmer PHP yang tidak kenal dengan MYSQL kadang- kadang cenderung memilih jenis data yang salah ( umumnya : memilih VARCHAR () padahal ada tipe data yang lebih tepat) dikarenakan tidak mengenal jenis data yang tersedia.
Berikut ini beberapa contoh kurang tepatnya pemilihan tipe data :
1. Memilih Char(8), atau Varchar(10) dan bukanya Date untuk menyimpan tanggal; kerugianya, lebih boros tempat dan tidak bisa memanfaatkan fungsi- fungsi khusus tanggal.
2. Memili Char(3), atau Char (6) ketimbang Tyinyint Unsigned untuk menyimpan data boolean (“Yes “ dan “No”; atau “True” dan “False “; padahal jauh lebih dinyatakan dengan 1 dan 0 yang hanya menempai 1 byte)
3. Memilih Float dan Double dan bukanya Decimal untuk menyimpan jumlah uang; kerugiannya, Float dan Double adalah berbasis biner dan seringkali tidak eksak dalam menyimpan pecahan Desimal.
5. Normalisasi dan Pemodelan
Normalisasi , skema , entiti-atribut , primary key (PK) dan foreign key (FK), tabel entiti, tabel relasi, OLTP & OLAP semuanya adalah istilah- istilah yang umumnya dijumpai dalam pemodelan fisik database.
I. Langkah pertama
· Dalam pemodelan adalah menemukan entiti-entiti. Enetiti bisa dibilang “objek” yang akan kita geluti. Misalnya, costumer, produk, dan transaksi. Seriap entiti biasanya ditaruh dalam satu tabel, tabel ini disebut tabel entiti.
· Mencari atribut-atribut entiti tersebut. Misalnya tabel costumer memiliki atribut sapaan , nama, alamat( jalan, kota , kodepos, propinsi,& negara), tanggal record ini ditambahkan, dsb.
· Mencari relasi diantara entiti-entiti. Umumnya relasi adalah satu dari 1-1, 1- many, many-many. Misalnya, relasi antara transaksi dan produk adalah many-many, artinya sebuahnya transaksi pembelian dapat berisi produk dan sebuah produk tentu saja dapat dibeli dalam lebih dari satu transaksi. Setiap relasi juga ditepkan pada tabel yaitu tabel relasi.
II. Langkah kedua
· Dalam permodelan tidak ada yang benar dan salah . yang ada adalah model yang tepat dan tidak tepat untuk keperluan tertentu. Misalnya untuk aplikasi sederhana modelnya sederhana. Semakin komplek aplikasi, model pun semakin rumit (jumlah entiti, relasi, dan atribut akan bertambah ).
· Tabel customet memiliki atribut alamat. Jika kita ingin mendukung banyak alamat untuk satu customers,maka alamat akan menjadi entiti dan menempati tabel sendiri. Lalu kita membuat tabel relasi customers alamat.
Indeks
Indeks adalah sesuatu yang berkaitan erat dengan implementasi, bukan modeling.
Tapi intinya indeks adalah setiap kolom yang:
1. Memiliki rentang nilai cukup banyak
2. Terletak pada tebl yang berisi banyak record;
3. c. Sering kali disebutkan diklausa Where dan /atau Order By dan/atau Group By; perlu diberi indeks. Ini dikarenakan indeks membantu mencari secara cepat sebuah nilai dari banyak nilai yang ada.
Beberapa contonhya:
· Setiap primary key umumnya otomatis diberi oleh database server, meskipun tabelnya masih berisi sedikit record atau bahkan kosong. Dikarenakan database harus sealalu mengecek keberadaan sebuah nilai field manakala ada sebuah record yang ditambahkan ( ingat, PK artinya tak boleh ada dua record yang mengandung nilai field ini yang sama). Tampa indexing, pengecekan akan memakan waktu yang lama.
· Field tanggal lahir dalam tabel customers kemungkinan besar harus diindeks. Bahkan dayofyear()field ini juga mungkin perlu diindeks. Mengapa? Karena 1. Rentang nilai cukup besar (365 hari dalam setahun * + – 60 jumlah tahun) 2. Tabel customer potensial ukuranya besar. 3. Sering disebutkan di klausa Where (misalnya mencari customers yang ultah hari ini).
· Field jenis kelamin mungkin tidak perlu diindeks, kecualai perbandingan pri:wanita amat drastis bedanya. Mengapa? Sebab 1. Rentang nilai yang ada hanyalah dua:L ( Lelaki) dan P (Perempuan). Meskipun ada indeks tetap tidak mempengaruhi kenerja.
Konkurensi, Locking, dan Transaksi
Programmer kadang tidak menyadari bahwa program/ skrip yang dinuatnya tidaklah seperti program dekstop yang dijalankan oleh satu user. Melaikan, dalam satu waktu bisa saja ada 10 atau 100 user yang “menembak” skrip anda diWeb. Kerena itu, isu locking dan konkurensi penting sekali. Contohnya :
$res = mysql_query("SELECT value FROM counters WHERE name='counter1'");
list ($value) = mysql_fetch_row($res);
$value++;
// do something else first...
$res = mysql_query("UPDATE counter SET value=$value WHERE name='counter1'");
Untuk kasus diatas pemecahannya adalah
// tidak perlu ambil nilai counter dulu...
// do something else first...
$res = mysql_query("UPDATE counter SET value=value+1 WHERE name='counter1'");
Tapi dalam kasus ini kadang-kadang harus melakukan locking terhadap tabel record untuk menjamin bahwa selama ini kita // do something else…
Klien 2, klien3, dan klien4 tidak bisa seenaknya menaikkan counter:
mysql_query("LOCK TABLES cuonters");
$res = mysql_query("SELECT value FROM counters WHERE name='counter1'");
list ($value) = mysql_fetch_row($res);
// do something else first... increase value or something...
$res = mysql_query("UPDATE counter SET value=$value WHERE name='counter1'");
mysql_query("UNLOCK TABLES");
atau lebih karena kita tidak [erlu melock keseluruhan tabel
mysql_query("SELECT GET_LOCK('lock1')");
$res = mysql_query("SELECT value FROM counters WHERE name='counter1'");
list ($value) = mysql_fetch_row($res);
// do something else first... increase value or something...
$res = mysql_query("UPDATE counter SET value=$value WHERE name='counter1'");
mysql_query("SELECT RELEASE_LOCK('lock1')");
ingat,locking dapat berakibat samping yaitu deadlock.
Transaksi. Transaksi pun sesuatu yang dipergunakan secara meluas didunia database, hampir tidak pernah kita jumpai dibahasa pemrograman ( karena data bahasa pemrograman ditaruh dalam variabel dimemori semua; tidak ada isu disk yang crash /lambat/ rusak / harus disinkronkan dengan data dimemori ). Karena itu anda perlu memahami konsep ini dari buku-buku tentang database.
Jenis Tabel
Di Mysql dikenal istilah tabel handler dan jenis tabel. Sekarang ada 3 jenis tabnel yang bisa dipakai di Mysql: MyiSam (default), BekeleyDB, dan InnoDB.
Yang perlu diketahui ada 3 hal yaitu:
1. a. Tidak semua tabel mendukung transaksi ( MyISAM tidak mendukung transaksi, jadi COMMIT dan RoolBack tidak melakukan sesuatu yang semestinya jika anda menerapkkan pada tabel MyIsAM)
2. b. Tidak semua tabel punya karakteristik performace yang sama(BerkeleyDB misalnya, lambat jika ukuran tabel besar) dan disimpan dengan cara yang sama ( tabel MyISAM misalnya, disimpan dalam 3 file: MYI, MYD, frm sementara tabel-tabel dan database-database InnoDB disimpan bersama dalam daerah disk yang disebut tabelspace;
3. c. Distribusi Mysql yang bukan – Max tidak kompile dengan dukungan terhadap BerkeleyDB dan InnoDB.
Nomer 3 atau C perlu anda ketahui karena jika kita ingin mengitruksikan Mysql untuk database dengan jenis tertentu :
CREATE TABLE (...) TYPE=BDB;
Dan Mysql tidak kompilr untuk mendukung BerkeleyDB, maka Mysql tidak akan protes dengan error, melainkan membuatkan tabel yang tersebut untuk kita tapi dengan tipe default yaitu MyIsAm. Jadi anda perlu mengecek dulu dengan menggunakan SHOW TABLE STATUS:
mysql>create table t4 (i int) type=innodb;
Query OK, 0 rows affected (0.00 sec)
mysql>show table status from mydb like 't4';
+------+--------+-...
| Name | Type | ...
+------+--------+-...
| t4 | MyISAM | ...
+------+--------+-...
PENUTUP
Sebetulnya untuk menggunakan Mysql dengan baik dan benar diperlukan skill-skill dasr lain seperti membackup, merestore, mengeset parameter-parameter server, dsb
0 komentar:
Posting Komentar