Thursday, December 9, 2010

Simple MySQL tips

MySQL merupakan satu pelayan pengkalan data yang bagus.

tetapi walau sehebat mana pun sesuatu aplikasi pelayan pengkalan data itu tidak akan ada maknanya kalau kita salah mereka bentuk struktur pengkalan data kita.

masalah utama utk pengkalan data berasakan sql adalah capaian masa untuk sesuatu 'query' itu selesai.

kalau didalam pembangunan berasakan web, masa amat penting. proses timeout merupakan mimpi ngeri yg tak nak dihadapi oleh pembangun aplikasi berasakan web. ada 2 penyumbang besar kepada jumlah masa yg diperlukan utk sesuatu halaman itu berjaya dipaparkan di pelayar pengguna selain dari jangkauan dan limitasi capaian internet ialah masa yg diambil oleh bahasa pengatucara utk memproses sesuatu permintaan dan masa yg diambil oleh query utk mendapatkan keputusan dari pengkalan data.

didalam satu permintaan mungkin akan ada 1 atau lebih query yg perlu dilakukan utk mendapatkan data2 yg didinginkan. disini, masa akan menjadi panjang kalau kita tidak menstrukturkan 'table' pengkalan data dgn betul.

paling penting, 'PRIMARY KEY' ataupun kunci utama data kita. jangan ketawa jika ada yg x buat pun bende ni. byk kegunaan primary key ini. bukan shj untuk mengelakkan pengulangan data ia juga mempercepatkan carian/query kita. kesan mungkin tidak nampak jika kita bermain dgn data berskala kecil.. tetapi bila ia menjangkau ratusan ribu baris... anda akan tepuk dahi memikirkannya...

untuk mempercepatkan carian/query, kalau boleh.. column yang penting & selalu dicari setkan ia dalam kombinasi primary key. sebagai cth.

kod untuk bilik darjah : 010305
dimana:
01 mewakili id blok
03 mewakili id tingkat
05 mewakili id bilik darjah.

pendekatan yg paling sesuai adalah memecahkan kod bilik darjah itu kepada 3 column berasingan. dan gabungkan 3 column itu sebagai primary key.

ini juga memudahkan anda membuat carian bedasarkan blok atau tingkat atau bilik darjah atau mana2 gabungan mengikut keperluan. adalah lebih cepat masa yang diambil mengunakan standard operator seperti =,!= daripada mengunakan 'LIKE %someting%'.

kurangkan pengunaan varchar/char sebagai primary key. lebih sesuai jika mengunakan int atau tinyint bergantung kepada keperluan. praktikan pengunaan data rujukan yang amat membantu jika anda membangunkan aplikasi yg byk mengunakan data rujukan.

sebagai cth lg, jika anda mengunakan NO KP tai NO IC (benda yg sama) sebagai primary key. ia betul.. sesuatu yg unik. tetapi dalam format no kp lama, ada char disitu. ini akan melambatkan masa pencarian anda walaupun anda dah kenalpasti colum itu sebagai primary key.

apa yg boleh anda buat ialah. ciptakan 1 colum baru. bg nama cth 'idorang' dgn column type 'BIGINT' dgn kapasiti column sebanyak '20' dan column type 'UNSIGNED'.

gunakan query ini.

update table
SET `idorg` = CONV(SUBSTRING(CAST(SHA(TRIM(no_kp)) AS CHAR), 1, 16), 16, 10)

query diatas akan automatik ciptakan 1 unik id utk manusia yg mengunakan no kp sebagai identiti mereka bedasarkan nilai didalam column no_kp. dan ia semua int.

setakat ini sahaja tip utk mempercepatkan masa diambil utk carian didalam pengkalan data MySQL.

ada byk lg tip yg boleh dipraktikan dan diamalkan. bergantung kepada keperluan.

sekian.... salam.....

No comments: