Kueri:
SELECT * FROM table WHERE ? LIKE (col || '%');
dapat ditulis ulang sebagai (Postgres dan MySQL):
SELECT * FROM table WHERE col = left(?, length(col));
Seperti yang dikomentari, formulir pertama harus berfungsi juga. Ini bisa rumit, karena karakter dengan arti khusus untuk LIKE
(setidaknya _%\
) di kolom harus melarikan diri. Jika Anda ingin bekerja dengan MySQL dan Postgres, Anda harus mengamati karakter khusus di kedua implementasi. Jadi formulir ke-2 jauh lebih sedikit rawan kesalahan pada kepala sekolah.
Kinerja
Tak satu pun dari kueri ini dapat menggunakan indeks pada col
, keduanya tidak sargable
. Masalahnya dapat dinilai kembali sebagai menemukan semua kemungkinan awalan untuk pola pencarian yang diberikan ?
, yang dapat dioptimalkan dengan cara yang sama seperti dalam jawaban terkait ini (untuk Postgres) di dba.SE: