Share this topic on FacebookShare this topic on MySpaceShare this topic on Del.icio.usShare this topic on DiggShare this topic on StumbleUponShare this topic on TwitterShare this topic on GoogleShare this topic on Yahoo

Author Topic: select not in di mysql lemot  (Read 506 times)

0 Members and 1 Guest are viewing this topic.

Offline a17dh4

  • Senior Member
  • *
  • Thank You
  • -Given: 2
  • -Receive: 9
  • Posts: 436
  • Keep Trying, trying and trying....
select not in di mysql lemot
« on: February 07, 2010, 10:56:55 AM »
halo foxers...

ada yg pernah ngalamin gak, atau pernah make sintak di mysql :
[ select * from tabel1 where kode in / not in (select kode from tabel2) ]

kenapa pas di eksekusi di Mysql jadi laaaaamaaaaa banget ya...

sebelum nya sih pake Mssql gak ada masalah...
kira2 apa ya penyebabnya, dan gmn solusinya... ?

 :icon_salut:
-=>> Go FoxPro <<=-

Offline foxy

  • Fox-id M.V.P
  • Hero Member
  • *
  • Thank You
  • -Given: 12
  • -Receive: 43
  • Posts: 1330
    • Foxy Land
Re: select not in di mysql lemot
« Reply #1 on: February 07, 2010, 07:12:39 PM »
a17dh4:

Daripada pakai clause IN, imho, jauh lebih baik (dan lebih cepat) pakai INNER JOIN;
Code: [Select]
select table1.* from tabel1 inner join tabel2 on tabel1.kode = tabel2.kode

Kalau clause NOT IN, memang gak bisa pakai INNER JOIN. Seharusnya sih klausa NOT IN cukup cepat. Saya memang gak pernah pakai MySQL untuk production, jadi gak qualified untuk menilai. Tapi, mungkin beberapa hal ini bisa jadi pertimbangan:
1. Apakah ada banyak kode yang sama di tabel2? Kalau iya, Anda pasti akan mendapatkan hasil lebih cepat dengan menambahkan klausa DISTINCT;
Code: [Select]
select tabel1.* from tabel1 where tabel1.kode not in (select distinct kode from tabel2)

2. Kalau masih lambat, sebenarnya klausa NOT IN bisa diakalin pakai LEFT OUTER JOIN;
Code: [Select]
select tabel1.* from tabel1 LEFT OUTER JOIN tabel2 ON tabel1.kode = tabel2.kode
  where tabel2.kode is null
Walaupun saya sendiri sangsi kalau alternatif ini bisa lebih cepat... tapi silakan Anda coba deh...

hth,
foxy



Some new posts...

This post is provided as is. Feel free to use all the codes and information, however understand that I don't have any obligations to fix any bug(s) or follow up this subject.

Offline cahe.dhewe

  • Full Member
  • *
  • Thank You
  • -Given: 12
  • -Receive: 1
  • Posts: 64
Re: select not in di mysql lemot
« Reply #2 on: February 07, 2010, 08:23:33 PM »
untuk NOT IN di MySQL untuk data banyak memang lama banget, apa lagi kalo SELECT *
kalo memang kolomnya gak dibutuhkan semua coba SELECT nya jangan * tapi field yg diperlukan saja, siapa tau bisa cepet pak.


Offline ~teguh~

  • Fox-id M.V.P
  • Hero Member
  • *
  • Thank You
  • -Given: 2
  • -Receive: 5
  • Posts: 1011
Re: select not in di mysql lemot
« Reply #3 on: February 07, 2010, 09:43:47 PM »

mungkin field KODE nya mesti di index ...  ;)


gudlak,
~teguh~
FoxPro -- Learn it, love it and live with it

Offline davidmustakim

  • Fox-id M.V.P
  • Hero Member
  • *
  • Thank You
  • -Given: 1
  • -Receive: 23
  • Posts: 4599
Re: select not in di mysql lemot
« Reply #4 on: February 08, 2010, 06:59:42 PM »
berapa jumlah records dan fields tabel1 dan tabel2 ?
cepetan mana sih istilah lemot kebanding lambat?
cepetan mana dengan ini:-> buat cursor tabel2 ->index on kode cursor2->buat cursor tabel1->relasikan on kode cursor1ke2->display dengan filter cursor2.kode='' 
iseng2 sapa tau berhadiah

Offline ari_chandra

  • Junior Member
  • *
  • Thank You
  • -Given: 22
  • -Receive: 0
  • Posts: 230
    • www.ariechandra.blogspot.com
Re: select not in di mysql lemot
« Reply #5 on: February 08, 2010, 08:05:11 PM »
Saya belum pernah memakai klausa NOT IN,... tp jika suatu hari harus pakai mudah2an tidak akan lemot.
saya setuju dengan pendapat pak cahe.dhewe. sekedar berbagi, waktu itu saya memakai listing sqlexec(koneksi,'select * from namatable','cursor') listing tersebut saya letakkan di init form dan terasa lama saat buka form yg muncul cuma title bar dari form tersebut setelah di tunggu rada lama baru muncul keseluruhan formnya. saya juga gak tau apa penyebabnya tapi setelah saya ganti dengan menyebutkan satu2 nama tiap fieldnya hal itu tidak terjadi lagi.
jika ada salah mohon di koreksi dari para master sekalian, maklum masih newbie,..... :happy4: :happy4: :happy4:





Salam,

Offline samsul

  • Junior Member
  • *
  • Thank You
  • -Given: 2
  • -Receive: 0
  • Posts: 139
Re: select not in di mysql lemot
« Reply #6 on: February 09, 2010, 01:08:44 PM »
dalam menggunakan mysql jangan lupa :
1.  Beri index setiap tablenya
2.  Perhatikan pada waktu saat melakukan select , hindari penggunaan select * from nama_table
3.  kalau menggunakan select tampilkan filed yg di perlukan dan jangan lupa pakai klausa WHERE misal : select kode,nama from table1 where kode = '001'   (kode di table harus di index)
4.  kalau memang harus terpaksa menggunakan select * from nama_table maka gunakan LIMIT, misal select * from nama_table LIMIT 20

semoga membantu

 

Offline jbonz

  • Junior Member
  • *
  • Thank You
  • -Given: 0
  • -Receive: 6
  • Posts: 119
Re: select not in di mysql lemot
« Reply #7 on: February 09, 2010, 02:04:23 PM »
memang seperti yg dikatakan teman2 "select * from blablabla" keliatan sepele tp efeknya gede..kalau memang terpaksa ya mau ga mau semua field selain utk primary/foreign key dijadikan indek juga..
« Last Edit: February 09, 2010, 02:07:55 PM by jbonz »
Berakit rakit kita kehulu berenang renang kita ketepian bersakit dahulu senangpun tak datang malah mati kemudian

Offline a17dh4

  • Senior Member
  • *
  • Thank You
  • -Given: 2
  • -Receive: 9
  • Posts: 436
  • Keep Trying, trying and trying....
Re: select not in di mysql lemot
« Reply #8 on: February 09, 2010, 10:20:51 PM »
trims atas semua tanggapan foxers...

ya sih, pas di index, rada lumayan lah daripada gak di index, gak banyak sih record nya, paling ratusan ribu doang...
maklum aja, kebiasan main di mssql yg gak perlu index tapi masih lebih cepat dari mysql yg diindex.
-=>> Go FoxPro <<=-

Offline shee

  • Senior Member
  • *
  • Thank You
  • -Given: 0
  • -Receive: 1
  • Posts: 466
Re: select not in di mysql lemot
« Reply #9 on: February 11, 2010, 07:21:40 AM »
Clausa NOT IN memang sebisa mungkin dihindari penggunaannya untuk data yang besar pada table criteria sebab mysql akan melakukan proses pencocokan antara isi table query dengan isi table criteria secara one to many sehingga waktu eksekusinnya akan menjadi lama....., kira2x bgitu kali yahhh...  :tongue7:

Offline davidmustakim

  • Fox-id M.V.P
  • Hero Member
  • *
  • Thank You
  • -Given: 1
  • -Receive: 23
  • Posts: 4599
Re: select not in di mysql lemot
« Reply #10 on: February 26, 2010, 03:10:39 PM »
100 untuk Mas Shee