Kasus

Table A
ColA ColB ColC ColD
1       B1    C1    D1
2       B2    C2    D2
.
.
.
1000000 BXX CXX DXX

Table B
BKode BUr
B1  UrB1
B2 UrB2
.
.
.
BXX UrBXX

Table C Sama dengan table B

Kita ingin mencari sebuah data dari Table A yang memiliki ID (ColA)
tertentu, lengkap dengan uraian untuk B dan C. Querynya bagaimana?

B. Unoptimized Query
--> select TableA.ColA, TableB.BUr, TableC.CUr
--> from TableA
--> Inner join TableB on (TableA.ColB = TableB.BKode)
--> Inner join TableC on (TableA.ColC = TableC.CKode)
--> where TableA.ColA = XXX
Ketika mendapatkan query seperti ini, DB Server akan melakukan hal berikut :
1. Ambil semua data Table A (1000000 record)
2. Ambil semua data Table B (XXX record)
3. Ambil semua data Table C (YYY record)
4. Cross Reference semua data di TableA dengan Record yang
bersangkutan pada Table B
    Jumlah operasi persamaan (Jumlah Record A * JUmlah REcord B) ..
Berapa Coba??
5. Hal yang sama dilakukan untuk Table A dengan Table C... Udah berapa
kali nih
    perbandingan yang dilakukan???
6. Filter hasil yang dilakukan dengan syarat kolom A = dengan satu
angka yang menghasilkan satu record...

Moral of the story: bayangkan banyaknya perbandingan yang dilakukan
hanya untuk mendapatkan satu record.
Note: - Ambil bukan berarti dikirm ke client, ini hanya berarti data
diambil kememori.
         - Langkah diatas berdasar pada asumsi, DB Server tidak
melakukan operasi optimasi (database besar seperi Oracle, DB2 dan yang
lain, cara kerja diatas akan berubah sesuai dengan tingkat optimasi
yang dilakukan).

B. Optimized Query
--> select Tab1.ColA, , TableB.BUr, TableC.CUr
--> from
--> (select ColA, ColB, ColC from Table A where ColA = XXX) as Tab1
--> Inner join TableB on (Tab1.ColB = TableB.BKode)
--> Inner join TableC on (Tab1.ColC = TableC.CKode)

Nah sekarang apa yang terjadi dengan query ini:
1. Scan TabelA, Ambil data yang sesuai dengan filter
2. Ambil semua data Table B (XXX record)
3. Ambil semua data Table C (YYY record)
4. Cross Reference semua data di TableA dengan Record yang
bersangkutan pada Table B
    Jumlah operasi persamaan (Jumlah Record A * JUmlah REcord B)
Karena Jumlah record  Tab1 hanya 1 maka operasi perbandingan hanya
berlangsung sebanyak record TableB)
5. Hal yang sama dilakukan untuk Table A dengan Table C... Udah berapa
kali nih
    perbandingan yang dilakukan???
6. Query selesai. muncullah record idaman hati dengan cepat... memori
aman... cpu OK.

Note:
Mengenai operasi pembandingan sekali lagi ada asumsi bahwa table tidak
berindex kalau ber-index maka pebandingan dilakukan kepada table
index:

Query "B" hanya bisa dilakukan pada DBMS yang mensupport full select
(select on select) atau apapun namanya.

Moral OF The Story:
--> Filter dilakukan sesegera mungkin untuk meringankan beban server
sehinggan tidak melakukan operasi pembandingan yang sebenarnya tidak
perlu.

Analogi:
  Supaya pemerintahan bersih, pilihlah dari awal orang-orang yang
bersih... Iya nggak???

Saran, Ide, Kritik kita bahas disini.. nggak perlu ke DPR, percuma...


Berlangganan: [EMAIL PROTECTED]
Stop Berlangganan: [EMAIL PROTECTED]
Keluhan Milis(Unbouncing,spam,dll): [EMAIL PROTECTED]



Yahoo! Groups Sponsor
ADVERTISEMENT
click here
Web Bug from http://us.adserver.yahoo.com/l?M=294855.5468653.6549235.3001176/D=groups/S=:HM/A=2376776/rand=491807516


Yahoo! Groups Links

Reply via email to