Dalam rencana yang lepas kita menggunakan fungsi REGEXP_MATCHES()
untuk mencari tanda pagar (hashtag) dalam komen .
Postgres: REGEXP_MATCHES() function Bahagian 1
Kembali kepada contoh kedai makan kita yang lepas. Kita hari ini perlu buat 2 analisa data untuk kedai kita: Apakah hashtag yang digunakan oleh pelanggan ? Mengenal pasti komen yang mengandungi perkataan tertentu Seperti biasa mari mulakan dengan create table:
Bahagian 2 rencana ini mari kita cuba untuk melihat satu lagi analysis yang perlu dilakukan: Mengenal pasti perkataan tertentu dalam ruang komen.
Katakanlah kita cuba mendapatkan komen-komen yang mempunya perkataan seperti nasi
atau air
. Mungkin ini cara yang biasa kita lakukkan:
select 'air' as katakunci, comments from customer_comments where comments like '%ayam%'
UNION ALL
select 'nasi' as katakunci, comments from customer_comments where comments like '%nasi%';
Anda akan mendapatkan hasil query seperti ini
Mari kita lihat execution plan, untuk query ini:
Full Scan
berlaku 2 kali untuk table kerana condition yang digunakan adalah LIKE
dan UNION ALL
untuk mengabungkan dua dataset yang berlainan
Dengan menggunakan fungsi REGEXP_MATCHES()
, kita akan dapatkan hasil yang sama tetapi dengan kos yang lebih rendah.
SELECT
REGEXP_MATCHES((comments), 'ayam|nasi','g') katakunci,
comments
FROM
customer_comments;
Ini adalah hasilnya:
Explain plan menunjukkan kos yang lebih rendah kerana FULL SCAN
hanya berlaku sekali.
Sebelum terlupa mari kita periksa regex yang digunakan dengan regex101
Selamat mencuba