Tip dan Trik Query SQL
sekedar berbagi pengalaman.saya pernah melakukan konversi database alumni universitas sumatra utara. jumlah datanya 47426 data.nah, permasalahannya di sini, ternyata dari data tersebut, ada data sebanyak 2248 yang isinya adalah data yang double, maksudnya, setiap 1 data dari 2248 data tersebut memiliki 2 data. jadi data yang diperlukan dari 2248 data tersebut adalah setengah dari data itu yaitu sebanyak 1124.
untuk keperluan tersebut, saya harus mengambil 1 data dari 2 data yang double, yang datanya diambil dari 2248 data tersebut. untuk keperluan tersebut saya mencoba menggunakan query seperti ini:
1. menampilkan nim yang datanya double
select
nim from alumni
group by nim
having count(nim)=2
nah datanya muncul sebanyak 1124
data
2. selanjutnya, saya akan mengambil data yang nim-nya yang tidak double, tujuannya adalah
memisahkan data yang nim-nya double dengan data yang nim-nya tidak double,
nah saya menggunakan
query
select * from
alumni
where nim not in
(
select nim from alumni
group by nim
having
count(nim)=2
)
ternyata yang terjadi adalah selama 1 jam datanya belum juga muncul, kemudian
saya limit menjadi
select * from
alumni
where nim not in
(
select nim from alumni
group by
nim
having count(nim)=2
)
limit 0,10
waktu yang diperlukan untuk menampilkan 10 data aja
adalah 14313 ms = 14,5 detik.
nah, ternyata setelah saya cek, secara teoritis, bahwa setiap kali
query tersebut men-select 1 data, maka query tersebut akan men-select semua data nim yang double
(1124 data), nah, dari 1 data tersebut akan dibandingkan dengan 1124 data, jika 1 data tersebut
tidak ada dalam data 1124, maka data tersebut akan ditampilkan.
kesimpulannya, kinerja query ini
kurang efektif, karena setiap select 1 data, maka queyr ini juga akan select data yang double,
kemudian data itu dibandingkan.
saran
jangan terlalu sering memakai subquery yang
memakai klausa in atau not in .
seperti kasus di atas, saya menggunakan trik seperti
berikut:
1. select semua data yang datanya double,
2. hasil select, di copi dan di paste-kan
langsung ke dalam query
select * from alumni
where nim not in
(
paste-kan semua data hasil
select nim double ke sini
)
semoga bermanfaat