Kelemahan NOT IN dalam query SQL ORACLE

Kelemahan operator NOT IN dan IN terlihat jelas ketika kedua operator tersebut digunakan dalam subquery. Dapat Dicontohkan sebagai berikut :

SELECT * FROM tabel1 a WHERE a.kolom1 NOT IN ( SELECT b.kolom1 FROM tabel2 b).

Dalam algoritma pencariannya , Klausa IN dan NOT IN memeriksa apakah sebuah nilai terdapat dalam list (bisa array, bisa correlated subquery seperti contoh di atas) / harus membandingkan setiap value terlebih dahulu. Hal ini mengakibatkan cost yang dibutuhkan (pengunaan memori) lumayan besar.

Untuk mengatasi hal semacam ini , anda disarankan untuk menggunakan operator  EXISTS dan NOT EXISTS. Contoh :

SELECT * FROM tabel1 a WHERE a.kolom1 NOT EXISTS ( SELECT b.kolom1 FROM tabel2 b).

klausa EXISTS dan NOT EXISTS hanya memeriksa keberadaan ada atau tidaknya row pada suatu list. Secara performance, tentu jauh lebih cepat EXISTS daripada IN dalam hal correlated subquery  (Untuk Membuktikan anda Bisa mengunakan beberapa tools , seperi sql developer atau toad )

Kalo IN dan NOT IN memakan cost banyak, kenapa Operator ini disediakan?? Yang Perlu diingat Operator  EXISTS dan NOT EXISTS hanya bisa digunakan dalam saubquery.
Jadi kita menggunakan IN dan NOT IN digunakan dalam hal seperti misalnya contoh di bawah ini:

SELECT * FROM tabel1 a WHERE a.kolom1 IN (10, 20, 30)

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: