Pojok Oracle buletin edisi 01 Mei 2006
---------------------------------
Do you Yahoo!?
New and Improved Yahoo! Mail - 1GB free storage!
----------
****************************************************************************
Pojok Oracle Buletin Edisi 01 Mei 2006
Redaksi: Erick
[EMAIL PROTECTED]
****************************************************************************
Menggunakan Explain Plan dengan Tree structure
Cara ini digunakan untuk menganalisa query dengan pendekatan parent/child.
Cara adalah sebagai berikut:
1.Contoh query
explain plan
set statement_id = SQL2 for
select a.cust_last_name, a.cust_first_name, a.cust_mid_init, b.order_desc,
b.order_create_dt
from customer a, order_hrd b
where cust_phone = :host1
and b.cust_no = a.cust_no
and b.order_status = open;
2.Query untuk membangun tree structure
select LPAD ( , 2*(level-1)) || operation Operations,
options Options,
decode(to_char(id),0,Cost= || nvl(to_char(position),n/a),
object_name) Object_name, id || - || nvl(parent_id),0) || - ||
nvl(position,0) Order, substr(optimizer,1,6) Opt
from plan_table
start with id = 0
abd statement_id = SQL2
connect by prior id = parent_id
and statement_id = SQL2;
3.Keterangan:
·Kolom Order menunjukkan parent ID, merupakan posisi dari tree
structure pada rencana eksekusi (execution plan). ID menunjukkan
urutan tahapan pengerjaan, tetapi bukan urutan eksekusi.
·OPT menunjukkan mode optimasi yang digunakan (optimizer).
4.Penjelasan
Untuk mengerti bagaimana oracle memproses query, kita harus
mengerti pada puturan (sequence) apa oracle memproses langkah itu dan
apa yang dilakukan oracle pada setiap tahap.
Putaran (sequence) ditentukan oleh hubungan parent/child pada
setiap tahap. Umumnya child lebih dulu di proses, paling tidak satu
kali dan merupakan input untuk parent. Ketika parent mempunyai
beberapa child, proses pengerjaan di urutkan berdasarkan nomor tahapan.
5.Arti dari hasil explain plan
Query ini mempunyai 5 tahap. Tahap ketiga di eksekusi pertama kali
karena berupa pencarian data antara (range scan) yang menghasilkan 0, 1,
atau banyak ROWID kepada tahap kedua. Untuk setiap ROWID yang dihasilkan,
pada tahap kedua data yang dihasilkan dari tahap ketiga akan diurutkan
berdasarkan ROWID dan mengembalikan hasilnya kepada tahap pertama. Untuk
setiap data yang diterima dari tahap kedua, tahap pertama akan mengirimkan
cust_no kepada tahap kelima. Pada tahap kelima semua nomor customer akan
digunakan untuk menjalankan proses unique scan untuk mendapatkan ROWID.
ROWID yang dihasilka akan dikembalikan kepada tahap ke-empat. Jika tidak
ditemukan ROWID yang dicari, maka tahap 4 akan membertahu tahap pertama
untuk meng-eliminasi baris data itu. Jika ROWID yang dicari ditemukan,
maka tahap empat akan meng-akses tabel berdasarkan ROWID dan mengambil
data yang dicari. Ketika data yang dicari ditemukan, dan jika nomor
telepon benar, data itu akan diterukan ke tahap pertama.
6.Performance
Query diatas mengambil setiap order yang ada pada selang waktu tertentu
dan dilanjutkan dengan mencocokkannya dengan data customer.
7.Bandingkan dengan query dibawah ini yang merupakan perubahan sintak query
di atas.
Select a.cust_last_name, a.cust_first_name, a.cust_mid_init, b.order_desc,
b.order_create_dt
from order_hdr b, customer a
where cust_phone = :host1
and b.cust_no = a.cust.no
and b.order_status = open;
8.Penjelasan performance query yang telah diubah.
Query diatas menghasilkan susunan tabel akses yang baik karena tabel
customer merupakan setengah dari query yang di eksekusi pertama kali dan
kemungkinan besar hanya akan mengembalikan satu baris data ke setengah
bagian query order.
Query diatas bukan merupakan query yang baik dari sisi optimasi and
Equal, karena sistem akan mencari 1000 ROWID pada order_status index untuk
dicocokkan dengan semua ROWID pada index cust_no.
9.Query untuk memperbaiki optimasi end equal:
Select a.cust_last_name, a.cust_first_name, a.cust_mid_init, b.order_desc,
b.order_create_dt
from order_hdr b, customer a
where cust_phone = :host1
and b.cust_no = a.cust.no
and b.order_status || = open;
10.Penjelasan query optimasi end equal
Perubahan pada bagian b.order_status || = open dilakukan untuk
menghentikan oracle menggunakan index order_status.
Catatan
Sebelum menggunakan explain plan perlu dilakukan hal-hal sebagai berikut:
·Menjalankan skrip pada ORACLE_HOME/rdbms/admin/utlxplan.sql.
·Untuk menampilkan hasil explain plan, lakukan query seperti berikut:
o Select operation, options, object_name, id, parent_id
from plan_table where statement_id = customer;
*****************************************************************************
[Non-text portions of this message have been removed]
--
www.itcenter.or.id - Komunitas Teknologi Informasi Indonesia
Info, Gabung, Keluar, Mode Kirim : [EMAIL PROTECTED]
:: Hapus bagian yang tidak perlu (footer, dst) saat reply! ::
## Jobs: itcenter.or.id/jobs ## Bursa: itcenter.or.id/bursa ##
$$ Iklan/promosi : www.itcenter.or.id/sponsorship $$
[@@] Jaket ITCENTER tersedia di http://shop.itcenter.or.id
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/ITCENTER/
<*> To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/