Rule base optimizer (RBO).
Tanpa adanya info statistik, urutan tabel di FROM dan
WHERE clause bisa mempengaruhi urutan execution plan
di RBO. Sampai2 perlu diakalin dengan menggunakan
kondisi b.order_status || '' = 'open'
utk mensuppress index di kolom order_status :)
Dengan adanya CBO, maka urutan table dan kolom menjadi
tidak penting. Dengan adanya histogram di kolom
order_status, Oracle otomatis bisa tahu kapan harus
memakai index sesuai dengan distribusi data.
regards,
tomi
--- yoga fm <[EMAIL PROTECTED]> wrote:
> 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�;
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
--
-----------I.N.D.O - O.R.A.C.L.E---------------
Keluar: [EMAIL PROTECTED]
Website: http://indo-oracle.lizt.org (NEW)
-----------------------------------------------
Bergabung dengan Indonesia Thin Client User Groups,
Terminal Server, Citrix, New Moon Caneveral, di:
http://indo-thin.vze.com
SPONSORED LINKS
| Membership database software | Database mortgage software | Pda database software |
| Database management software | Oracle database administration | Oracle database management |
YAHOO! GROUPS LINKS
- Visit your group "indo-oracle" on the web.
- To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
- Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.

