“Search and Replace” Karakter Pada Banyak Dokumen di Unix Shell

Thursday, May 29th, 2008

Saya masih menggunakan kata “Search and Replace” karena belum menemukan padanan yang tepat dalam Bahasa Indonesia. Search and Replace adalah fitur yang wajib hukumnya ada di sebuah editor. Dengan fitur ini maka kita dapat dengan mudah mengganti karakter yang kita inginkan dengan karakter penggantinya. Dan tentunya ini sangat membantu pekerjaan kita. Tapi bagaimana jika kita harus mengganti karakter dengan pola yang sama pada banyak dokumen? Apakah kita harus membuka dokumen tersebut satu persatu dari editor dan menggunakan fitur “search and replace”? Cape deh…

Pada tulisan ini saya mencoba berbagi tips (pengetahuan)? untuk menghadapi masalah ini dengan menggunakaan fitur - fitur yang ada di Unix Shell (bagi pengguna MS Windows bisa pakai cygwin untuk menjalanakan perintah - perintah Unix Shell).

Untuk permasalahan tersebut, kita bisa menggunakan grep dan sed yang ada unix shell. Yang mana grep akan mencari dokumen yang mengandung karakter yang dicari dan sed akan mengganti karakter tersebut dengan karakter penggantinya. Untuk lebih lanjut silahkan lihat contoh kasus berikut:

Saya asumsikan kita mempunyai dokumen vendor.html, form-vendor.html detail-vendor.html, customer.html, form-customer.html dan detail-customer.html. Dokumen customer.html adalah duplikasi dari vendor.html dan form-customer.html adalah duplikasi dari form-vendor.html begitu juga dengan detail-customer.html yang merupakan duplikasi dari detail-vendor.html Kita ingin mengganti kata - kata vendor ataupun Vendor yang terdapat pada ketiga dokumen tersebut. Untuk itu kita bisa menjalankan perintah berikut dari terminal

grep -l 'vendor' -r -i *customer*.html | while read i; \

do sed -i -e 's/vendor/customer/g' \

-e 's/Vendor/Customer/g' $i; \

done;

Penjelasan:

Perintah tersebut terdiri dari dua bagian yaitu grep dan sed yang dijalankan dalam statemen while.

grep -l 'vendor' -r -i *customer*.html

Perintah ini akan mencari dokumen *customer*.html yang mengandung kata - kata customer dengan mengabaikan case sensitive.

while read i; do sed -i -e 's/vendor/customer/g' -e 's/Vendor/Customer/g' $i; done;

Perintah ini akan mengganti kata vendor menjadi customer dan kata Vendor menjadi Customer pada dokumen yang ditemukan oleh perintah grep sebelumnya.

Perintah diatas tidak terbatas untuk tiga dokumen saja. Dan anda juga dapat menggunakan regular ekspresi pada sed untuk menemukan pola karakter yang lebih spesifik lagi.

Menambahkan Keyword Id di Subversion

Tuesday, April 8th, 2008

Terkadang kita ingin menampilkan nomor revisi terakhir di dalam dokumen yang kita buat sesuai dengan nomor revisi dari version control yang kita gunakan. Kalau menggunakan CVS cukup dengan menambahkan $Id$ pada dokumen yang kita buat. Maka setelah melakukan commit $Id$ tadi akan diganti menjadi berupa informasi tentang nama dokumen, nomor revisi dan juga waktu commit terakhir.

Lain halnya dengan Subversion, kita tidak bisa melakukannya hanya dengan menambahkan $Id$ di dalam dokumen yang kita buat. Karena pada Subversion $Id$ merupakan salah satu keyword dari propertynya. Untuk itu kita harus menset property keyword terlebih dahulu untuk bisa menggunakan $Id$. Untuk menset property pada svn gunakan opsi propset dari svn client. Berikut ini contoh perintah untuk menset property keyword Id:

svn propset svn:keywords Id tes.txt

Jika telah menset property Id maka tambahkan $Id$ pada dokumen anda dan kemudian commit. Buka kembali dokumen tadi maka anda akan melihat $Id$ tadi sudah diganti menjadi informasi revisi dari dokumen tersebut.

$Id: tes.txt 11 2008-04-07 23:53:43Z $

Petunjuk di atas cuma bisa menambahkan keyword Id pada dokumen tertentu saja. Untuk menambahkan keyword Id pada setiap dokumen yang ada di dalam direktori cukup dengan menambahkan opsi -R (rekursif) pada saat menset property keyword.

svn propset -R svn:keywords Id [direktori]

Kemudian tambahkan $Id$ pada setiap dokumen yang ada di direktori tersebut. Ada beberapa keyword lain yang bisa digunakan di subversion seperti URL, Author dan LastChangedBy. Untuk lebih jelasnya silahkan lihat help untuk opsi propset dari svn client.

svn help propset

How to improve credit scores
Remind Ringtones
Refinance houses
Credit card applications for bad
Soma
Fixed low apr credit cards
No credit score mortgage
Capital one credit card application in canada
Consolidate student loan debt
Codeine
Instant approval credit cards applications
Instant credit approval cards
Dave Hollister Ringtones
Dynamic ip VPN
Instant approval credit cards
Credit cards online application
Instant approval credit cards for
Debt consolidation lending
Mac os x VPN
Home insurance price
Ultram
How do i get a free credit report
Linksys VPN
Credit report dispute forms
Credit card offer
Credit card offer
Low apr credit cards uk
Diazepam
Renter insurance
Cialis
Personal credit score
Card credit debt plan reduction
Credit report
Small commercial loan
Best creditcard debt reduction strategies
Low apr credit cards
Free Verizon Ringtones
Auto loan
Secured credit card application
Kmart credit card application
Low apr student credit cards
Check credit reports
Instant approval bad credit credit cards
Instant online approval for credit cards
Business card consolidation credit credit debt debt finances
Anonymous internet
First time home loans
Credit card application for people with bad credit
Good credit scores
Best credit report
Instantly instant free online credit report
Apr credit cards
Instant approval credit cards
Home equity mortgage
Maxis Caller Ringtones
Levitra
Nextel Ringtones
Boost your credit score
Credit cards instant approval
Credit report fico score
Best way to eliminate credit card debt
San diego credit score needed to get a mortgage
Tylenol
Ways to improve credit score
Card credit debt debt negotiation reduction service
Canada credit card application
Credit card applications for people
Home equity
Insurance credit score
Scores credit
Firewall and VPN
Credit score uk
Card consumer credit debt stastics
Free debt settlement
Fair credit reporting act of 1970
Effexor
Credit card application instant

Remote ke Mesin Lain Tanpa Password Dengan Menggunakan Ssh-keygen

Friday, February 22nd, 2008

Password adalah hal yang sangat penting dalam melakukan autentikasi. Password ini digunakan untuk meyakinkan mesin/komputer bahwa yang memberikan password dengan benar adalah yang berhak mengakses aplikasi/sistem yang dilindungi oleh autentikasi tadi. Begitu juga jika kita melakukan remote ke mesin lain. Mesin yang diakses akan meminta password, dan jika password yang kita berikan salah maka kita tidak diizinkan melakukan remote ke mesin tersebut.

Jika mesin yang anda remote jumlahnya sedikit, memasukkan password bukan merupakan suatu masalah. Tapi jika mesin yang anda remote jumlahnya banyak, dan ini dilakukan secara berulang - ulang, maka memasukkan password bisa menjadi masalah baru dan juga hal yang sangat membosankan. Ditambah lagi kita harus mengigat password yang berbeda untuk setiap mesin.

Untuk mengatasi masalah tersebut kita bisa menggunakan aplikasi ssh-keygen. Dengan aplikasi ini kita bisa melakukan remote ke mesin lain melalui ssh tanpa harus memasukkan password. Aplikasi ini bukanlah hal yang baru bagi sistem administrator. Saya sendiri sudah lama menggunakan aplikasi ini (walaupun saya bukan seorang sistem administrator). Kebetulan kemarin saya harus menggunakan aplikasi ini kembali dan mengingatkan saya untuk menuliskannya di blog ini. Mudah - mudahan bisa menjadi petunjuk buat orang yang belum mengetahuinya. Berikut contoh penggunaan sederhana dari aplikasi ssh-keygen.

dolly@dolly:~$ ssh-keygen -t dsa

Maka akan menghasilkan keluaran berikut

Generating public/priva$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/dolly/.ssh/id_dsa):

Tekan enter lagi

Your identification has been saved in /home/dolly/.ssh/id_dsa.
Your public key has been saved in /home/dolly/.ssh/id_dsa.pub.
The key fingerprint is:
ee:48:13:ed:1f:49:45:14:10:a2:31:91:d5:d0:19:61 dolly@dolly

Sesuai dengan informasi di atas, ssh-keygen telah membuat file id_dsa dan id_dsa.pub di ~/.ssh. Salin file id_dsa.pub ke mesin tujuan dan ubah nama filenya menjadi authorized_keys.

dolly@dolly:~$ scp ~/.ssh/id_dsa.pub dolly@remote:~/.ssh/authorized_keys

Mesin tujuan akan meminta password untuk menerima file yang dikirim melalui scp. Karena kita sudah mempunyai file id_dsa.pub, maka untuk login ke mesin lain kita tinggal menyalin file tersebut ke mesin - mesin lainnya. Jika file sudah berhasil disalin ke mesin tujuan, maka anda sudah bisa melakukan remote ke mesin tujuan tanpa memasukkan password.

dolly@dolly:~$ ssh dolly@remote

Koq bisa login tanpa password?

Sewaktu kita mengirimkan request untuk melakukan remote ke mesin tujuan, maka ssh akan melakukan pengecekan antara data key yang ada di mesin lokal (~/.ssh/id_dsa) dengan key yang ada di mesin tujuan (~/.ssh/authorized_keys)

Anda bisa melakukan remote tanpa password ke mesin tujuan hanya terbatas pada mesin yang sudah anda buat file id_dsa nya saja. Jika anda melakukan remote ke mesin tujuan dari mesin lain, maka mesin tujuan akan tetap meminta password. Untuk itu anda harus membuat file id_dsa di setiap mesin yang anda gunakan untuk remote ke mesin tujuan. Untuk membuat file id_dsa, caranya sama dengan sebelumnya. Hanya saja cara menyalain file id_dsa.pub yang berbeda.

Untuk menyalin file id_dsa.pub ke mesin tujuan tidak bisa lagi menggunakan cara sebelumnya, karena cara itu akan mereplace/mengganti file authorized_keys yang sudah ada. Untuk menyalin file tersebut bisa menggunakan cara berikut:

dolly@office:~$ scp id_dsa.pub dolly@remote:~/.ssh/id_dsa.pub

dolly@office:~$ ssh dolly@remote

Mesin tujuan akan meminta password. Masukkan password, dan jika benar maka kita akan bisa masuk ke server tujuan

dolly@office:~$ echo ” ” >> ~/.ssh/authorized_keys
dolly@office:~$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

Logout dari mesin tujuan (ctrl + d), kemudian remote lagi ke mesin tujuan maka mesin tujuan tidak akan meminta password lagi.

dolly@office:~$ ssh dolly@remote

Dengan mengikuti petunjuk - petunjuk diatas, anda sudah bisa melakukan remote ke mesin lain tanpa password dengan menggunakan ssh. Untuk penggunaan yang lebih lanjut/advance, anda bisa membaca manual dari ssh-keygen.

Catatan:
Saya asumsikan di komputer anda sudah terinstall aplikasi ini, jika belum ada anda harus menginstallnya terlebih dahulu.

Manipulasi Data Menggunakan Tabel Pada Database Lain di MySQL

Thursday, February 14th, 2008

MySQL mengizinkan kita untuk memanipulasi data menggunakan data dari database lain. Dengan catatan user kita memiliki akses ke database tersebut. Hal ini bisa dilakukan dengan menyertakan nama database di depan nama tabel. Berikut dua contoh untuk perintah SQL memanipulasi data dari database lain.

CREATE TABLE SELECT

CREATE TABLE  `tost`.`test` SELECT * FROM `test`.`test`
Hasil dari perintah SQL diatas akan membuat table test di database tost yang tabelnya itu (bentuk dan juga isinya) diduplikasi dari tabel test di datbase test.

UPDATE TABLE

UPDATE `tost`.`test`, `test`.`test`
SET `tost`.`test`.`text` = `test`.`test`.`text`
WHERE `tost`.`test`.`id` = `test`.`test`.`id`
Hasil dari perintah SQL diatas akan mengupdate isi field text di table test pada database tost agar sama dengan isi field text di table test pada database test.

Saya rasa kedua contoh perintah SQL diatas sudah cukup, dan mudah - mudahan postingan ini bisa menjawab pertanyaan berikut.

Tidak Bisa Mengakses MySQL Server di Ubuntu

Wednesday, January 30th, 2008

Kemarin ada teman yang tanya kepada saya, kenapa dia tidak bisa mengakses MySQL Server di mesin Ubuntu dari komputer lain. Dan kasus ini cuma terjadi pada mesin Ubuntu saja, karena dia sudah mencoba mengakses MySQL Server ke mesin Fedora dan ternyata bisa. Biasanya ada beberapa point yang bisa menyebabkan hal ini, diantaranya:

  • Belum ditambahkan host “%” untuk user tersebut, pada tabel user di database mysql.
  • Adanya firewall pada network yang memblok port MySQL (default 3306)

Dari kedua point diatas, tidak ada satu pun yang menjadi jawaban atas permasalahan teman saya tersebut. Untuk point pertama, dia sudah menambahkan host “%” untuk user tersebut sebelumnya. Dan untuk point kedua, dia bisa mengakses MySQL Server di mesin Fedora, berarti tidak ada firewall yang memblok port MySQL.

Kemudian saya mencoba mencari di google, dan menemukan jawaban yang sebenarnya. Untuk sistem operasi Debian dan turunannya secara default parameter bind-address di set ke 127.0.0.1 pada file my.cnf yang menyebabkan MySQL Server tidak bisa diakses dari komputer lain. Hal ini dibuat untuk alasan keamanan.

bind-address = 127.0.0.1

Memang tidak baik memberikan akses ke database server dari komputer lain, tetapi ada kalanya kita membutuhkan hal tersebut. Agar MySQL Server bisa diakses dari komputer lain, ubah nilai dari parameter bind-address menjadi alamat network yang dizinkan untuk mengakses MySQL Server tersebut. Bisa juga dengan menghapus paramater tersebut atau menjadikannya komentar.

#bind-address = 127.0.0.1 

Mode Interaktif di Php

Saturday, January 12th, 2008

Terinspirasi dari idle milik python, saya mencoba mencari aplikasi serupa untuk Php. Setelah mencari informasi di google, saya menemukan tautan berikut. Dari tautan tersebut di jelaskan bahwa ternyata interpreter Php sudah menyertakan mode interaktif. Mode interaktif ini dapat digunakan dengan mengetikkan perintah php -a dari terminal (command prompt untuk sistem operasi Windows). Hampir sama dengan python -i milik python.

Malu juga rasanya baru tahu akan hal ini, padahal sudah hampir 4 (empat) tahun bermain - main dengan Php :D Untuk saya pribadi, mode interaktif ini berguna untuk melakukan pengetesan terhadap suatu fungsi. Sebelumnya, untuk melakukan pengetesan terhadap suatu fungsi, saya menulis kode - kode PHP di file kemudian dieksekusi dengan interpreter PHP.

Mode Interaktif di PHP

Gambar diatas adalah hasil tangkapan layar dari mode interaktif di Php. Perlu diingat, kode Php harus diawali dengan tag pembuka.

Menyisipkan Baris Baru Pada Vim Editor

Thursday, January 3rd, 2008

Adakalanya kita ingin menyisipkan baris baru (new line) diantara text yang terdapat pada dokumen. Pada Vim editor anda dapat melakukannya dengan menggunakan fitur “search and replace” dan menggunakan “\r” pada karakter penggantinya.

Saya asumsikan pada dokumen terdapat text seperti berikut:

satu, dua, tiga, empat, lima, enam, tujuh, delapan, sembilan, nol

Untuk menjadikan masing - masing kata diatas menjadi masing - masing satu baris, dapat menggunakan perintah berikut:

:%s/, /\r/

Contoh diatas masih sangat sederhana, anda dapat mengembangkannya lagi sesuai dengan kebutuhan anda.

Tautan terkait :

http://tech.petegraham.co.uk/2007/05/03/vim-search-and-replace-insert-new-line/

Konversi Dokumen DBF ke MySQL

Saturday, December 29th, 2007

Di penghujung tahun biasanya orang - orang pada sibuk membuat resolusi untuk tahun berikutnya. Tapi berbeda dengan saya, di penghujung tahun ini malah posting hal - hal seperti ini. Sebenarnya saya sudah membuat beberapa point untuk resolusi 2008, tapi masih Beta, jadi belum bisa dirilis :)

Di penghujung tahun ini, saya dapat tugas untuk mengkonversi sebuah aplikasi yang dibuat dengan Foxpro menjadi aplikasi berbasis web. Karena saya kurang familiar dengan foxpro, jadi saya mencari tool yang bisa mengkonversi dari Foxpro menjadi MySQL. Akhirnya saya menemukan tool yang bisa memenuhi kebutuhan saya, yaitu dbf2mysql.

Tool ini mempunyai banyak opsi dalam penggunaannya, tetapi saya akan bahas sedikit (yang saya gunakan) saja. Berikut adalah salah satu contoh penggunaan dbf2mysql :

dbf2mysql [-h host database server] [-U user database] \
[-d nama database] [-t nama tabel] \
[-P password] [-f] [-c] file-dbf

Opsi - opsi yang digunakan :

-h

Opsi ini digunakan untuk menentukan host dari database server

-U

Opsi ini digunakan untuk menentukan user dari database server

-d

Opsi ini digunakan untuk menentukan nama dari database

-t

Opsi ini digunakan untuk menentukan nama dari tabel

-P

Opsi ini digunakan untuk menentukan password dari user database server

-f

Opsi ini digunakan untuk mengubah nama field menjadi huruf kecil (lowercase)

-c

Opsi ini digunakan untuk membuat table di database server, jika tabel belum ada.

Sekian saja pembahasan tentang penggunaan dbf2mysql. Untuk selengkapnya bisa anda lihat di manualnya.

Selamat Tahun Baru 2008

Penggunaan GNU Screen di UNIX Shell

Monday, October 1st, 2007

Beberapa waktu yang lalu saya harus menggunakan MS Windows dalam melakukan pekerjaan di kantor. Hal ini dikarenakan AC di ruangan saya rusak yang menyebabkan ruangan saya tidak nyaman sehingga saya harus pindah ke ruangan lain untuk dapat tetap bekerja.

Kebiasaan saya dalam bekerja adalah melakukan remote dengan ssh ke development server dan melakukan banyak proses seperti memanipulasi file, dan juga menjalankan banyak program secara interaktif. Karena saya sedang menggunakan MS Windows, saya menggunakan aplikasi putty sebagai ssh client untuk remote ke server. Nah, yang jadi masalah adalah saya harus menggunakan beberapa shell untuk bekerja. Sedangkan dengan aplikasi putty saya harus menjalankan aplikasi putty sebanyak shell yang saya gunakan, bisa - bisa desktop dipenuhi dengan aplikasi putty. Tidak seperti aplikasi Gnome Terminal yang biasa saya gunakan di GNU Linux, yang cukup dengan membuka tab baru untuk menjalankan shell lain, sehingga tidak memenuhi desktop.

Untuk mengatasi permasalahan ini, saya menggunakan GNU Screen di remote server. Sehingga cukup menjalankan satu aplikasi putty kemudian menggunakan GNU Screen untuk melakukan proses yang lain. GNU Screen adalah aplikasi yang digunakan untuk membuat virtual terminal. Jadi cukup menjalankan satu terminal, kemudian dengan GNU Screen ini kita menjalankan proses - proses yang lain di virtual terminal. Untuk menjalankan aplikasi GNU Screen, cukup dengan mengetikkan perintah screen di terminal. Untuk mengontrol aplikasi GNU Screen ini terdapat banyak perintah, dan berikut ini beberapa perintah yang sering digunakan.

Secara default, setiap perintah yang ada di GNU Screen ini diawali dengan Ctrl+a (tekan Ctrl dan a sekaligus) dan diikuti dengan keystroke yang lain.

  • Ctrl+a c

Digunakan untuk membuat virtual terminal yang baru.

  • Ctrl+a n

Digunakan untuk pindah ke virtual terminal berikutnya.

  • Ctrl+a p

Digunakan untuk pindah ke virtual terminal sebelumnya.

  • Ctrl+a (0-9)

Digunakan untuk pindah ke virtual terminal sesuai dengan nomor terminal (Contoh Ctrl+a 2).

  • Ctrl+a d

Digunakan untuk keluar dari aplikasi GNU Screen tanpa harus mematikan proses yang sedang berjalan.

  • Ctrl+a Ctrl+\

Digunakan untuk keluar dari aplikasi GNU Screen dan mematikan proses yang sedang berjalan.

Dengan perintah Ctrl+a d kita akan keluar dari aplikasi GNU Screen dan proses - proses yang ada masih terus berjalan. Dan untuk kembali lagi ke aplikasi GNU Screen dapat dilakukan dengan menjalankan perintah screen -r. Perintah ini akan berjalan jika sebelumnya kita hanya menjalankan satu aplikasi GNU Screen. Jika sebelumnya terdapat lebih dari satu aplikasi GNU Screen, maka kita harus melihat list dari session aplikasi GNU Screen yang dijalankan sebelumnya dengan perintah screen -ls. Perintah ini akan menampilkan session dari aplikasi GNU Screen yang ada dan juga statusnya. Untuk kembali ke salah satu session aplikasi GNU Screen dapat dilakukan dengan menjalankan perintah screen -r .

Untuk daftar perintah yang lebih jelas bisa dilihat di Screen Manual Page atau bisa dilihat disini.

Optimasi Left Join Dengan Subquery di MySQL

Monday, September 3rd, 2007

Left Join adalah salah satu dari beberapa tipe join yang terdapat di SQL untuk mengkombinasikan lebih dari satu tabel. Mengkombinasikan lebih dari satu tabel akan mempengaruhi kecepatan suatu query dalam berinteraksi dengan database. Hal ini akan mengakibatkan aplikasi lebih lambat menampilkan informasi. Pada tulisan kali ini saya akan mengambil contoh penggunaan Left Join dengan 2 tabel, yaitu tabel berita dan tabel komentar dengan key berita_id.

Tabel berita memiliki attribut berita_id, tanggal, judul dan berita. Tabel komentar memiliki attribut komentar_id, pengirim, email, komentar dan berita_id. Kedua tabel ini hanya merupakan sampel yang kondisinya memenuhi syarat untuk menggunakan LEFT JOIN. Kalaupun ada kesamaan tokoh, karakter dan lain sebagainya bukanlah disengaja (koq kayak filem ya? hihihihi)

Untuk menampilkan informasi dari berita dengan jumlah komentar pada setiap berita, dapat menggunakan query berikut :

SELECT A.berita_id, A.judul, A.berita, COALESCE(COUNT(B.komentar_id), 0)
AS total_komentar FROM berita A LEFT JOIN komentar B
USING(berita_id) GROUP BY A.berita_id ORDER BY berita_id DESC

Kenapa query di atas bisa menjadi lambat dengan data dalam jumlah besar?

Karena query tersebut menghitung jumlah key pada tabel sebelah kanan (komentar) sebanyak key pada tabel sebelah kiri (berita). Maka jika tabel berita berisi 4000 data dan tabel komentar berisi 8000 data, maka query diatas akan melakukan pengecekan jumlah komentar sebanyak 4000 kali terhadap 8000 data komentar.

Bagaimana cara mengoptimasinya?

Query diatas dapat dioptimasi dengan membuat tabel di sebelah kanan (komentar) jumlah datanya lebih kecil atau sama dengan jumlah data pada tabel sebelah kiri (berita), dan tidak menghitung key pada tabel sebelah kanan sebanyak jumlah key pada tabel sebelah kiri (berita). Untuk melakukan hal ini bisa dengan menggunakan subquery.

SELECT A.berita_id, A.judul, A.berita, COALESCE(B.total_komentar, 0)
AS total_komentar FROM berita A LEFT JOIN
(SELECT berita_id, COUNT(komentar_id) AS total_komentar
FROM komentar GROUP BY berita_id) B
USING(berita_id) GROUP BY A.berita_id ORDER BY berita_id DESC

Dari query diatas, dapat dilihat tabel sebelah kanan (komentar) berisi subquery yang menghasilkan attribut berita_id dan total_komentar dengan jumlah data yang lebih kecil atau sama dengan jumlah data pada tabel sebelah kiri (berita). Kemudian dengan tabel sebelah kiri dan kanan dikombinasikan tanpa ada penghitungan key pada tabel sebelah kanan sebanyak key pada tabel sebelah kiri. Query ini jika dieksekusi akan memakan waktu sebesar 0.01 detik jauh lebih kecil dari query yang sebelumnya.

Sejauh ini saya masih menggunakan subquery untuk mengoptimasi LEFT JOIN pada contoh kasus seperti di atas. Pada contoh kasus di atas penggunaan subquery meningkatkan waktu eksekusi sebesar 90%.